? ? 最近開(kāi)發(fā)了一個(gè)項(xiàng)目,客戶要求壓力測(cè)試,測(cè)試時(shí)發(fā)現(xiàn)并發(fā)量大時(shí)php-fpm占用cpu一直100%,調(diào)整了php的最大進(jìn)程數(shù)pm.max_children,優(yōu)化了程序效果不明顯。后面使用了opcache,cpu使用率一下降到20%左右。
什么是opcache?下面是百度:
Opcache 的前生是?Optimizer+
?,它是PHP的官方公司 Zend 開(kāi)發(fā)的一款閉源但可以免費(fèi)使用的 PHP 優(yōu)化加速組件。
官網(wǎng)介紹:
OPcache 通過(guò)將 PHP 腳本預(yù)編譯的字節(jié)碼存儲(chǔ)到共享內(nèi)存中來(lái)提升 PHP 的性能, 存儲(chǔ)預(yù)編譯字節(jié)碼的好處就是 省去了每次加載和解析 PHP 腳本的開(kāi)銷(xiāo)。
PHP 5.5.0 及后續(xù)版本中已經(jīng)綁定了 OPcache 擴(kuò)展。?對(duì)于 PHP 5.2,5.3 和 5.4 版本可以使用?? PECL?擴(kuò)展中的 OPcache 庫(kù)。
PHP的正常執(zhí)行流程如下:
request請(qǐng)求(nginx,apache,cli等)-->Zend引擎讀取.php文件-->掃描其詞典和表達(dá)式 -->解析文件-->創(chuàng)建要執(zhí)行的計(jì)算機(jī)代碼(稱(chēng)為Opcode)-->最后執(zhí)行Opcode--> response 返回。
如上圖,啟用opcache之前,每一次請(qǐng)求PHP腳本都會(huì)執(zhí)行一遍以上步驟,如果PHP源代碼沒(méi)有變化,那么Opcode也不會(huì)變化,顯然沒(méi)有必要每次都重新生成Opcode,結(jié)合在Web中無(wú)所不在的緩存機(jī)制,我們可以把Opcode緩存下來(lái),以后直接訪問(wèn)緩存的Opcode豈不是更快。
啟用Opcode緩存之后的流程圖如下所示:
Opcode cache 的目地是避免重復(fù)編譯,減少 CPU 和內(nèi)存開(kāi)銷(xiāo)。
那要如果配置Opcode?php7.4自帶就有,我是在php.ini加上如下配置
zend_extension=opcache.so
opcache.enable=1
opcache.use_cwd=1
opcache.enable_cli=1
opcache.save_comments=1
opcache.huge_code_pages=1
opcache.memory_consumption=512
opcache.max_wasted_percentage=5
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=40960
opcache.validate_timestamps=0
opcache.force_restart_timeout=180
opcache.error_log=/u01/log/php/opcache.log文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-495083.html
opcache.log_verbosity_level=1文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-495083.html
到了這里,關(guān)于php7.4生產(chǎn)環(huán)境壓力測(cè)試CPU占用100%解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!