五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > php中zend opcache的性能最佳設(shè)置

php中zend opcache的性能最佳設(shè)置

文章來(lái)源:365jz.com     點(diǎn)擊數(shù):386    更新時(shí)間:2018-06-24 08:31   參與評(píng)論

在網(wǎng)上無(wú)意中看到的一篇文章,這哥們非常簡(jiǎn)潔地談?wù)摿藌end opcache的最佳設(shè)置,他說(shuō)他為此花了大量的時(shí)間探索zend opcache的每個(gè)設(shè)置選項(xiàng)的細(xì)節(jié),甚至是閱讀它的源代碼,并且在自己的項(xiàng)目中實(shí)踐(一個(gè)每天有117 million的HTTP請(qǐng)求的應(yīng)用)。
OPcache 通過(guò)將 PHP 腳本預(yù)編譯的字節(jié)碼存儲(chǔ)到共享內(nèi)存中來(lái)提升 PHP 的性能, 存儲(chǔ)預(yù)編譯字節(jié)碼的好處就是 省去了每次加載和解析 PHP 腳本的開(kāi)銷(xiāo)。

OPcache 配置選項(xiàng)
名字默認(rèn)可修改范圍更新日志
opcache.enable"1"PHP_INI_ALL
opcache.enable_cli"1"PHP_INI_SYSTEM從 PHP 7.1.2 開(kāi)始,默認(rèn)啟用
opcache.memory_consumption"64"PHP_INI_SYSTEM
opcache.interned_strings_buffer"4"PHP_INI_SYSTEM
opcache.max_accelerated_files"2000"PHP_INI_SYSTEM
opcache.max_wasted_percentage"5"PHP_INI_SYSTEM
opcache.use_cwd"1"PHP_INI_SYSTEM
opcache.validate_timestamps"1"PHP_INI_ALL
opcache.revalidate_freq"2"PHP_INI_ALL
opcache.revalidate_path"0"PHP_INI_ALL
opcache.save_comments"1"PHP_INI_SYSTEM
opcache.load_comments"1"PHP_INI_ALL
opcache.fast_shutdown"0"PHP_INI_SYSTEM
opcache.enable_file_override"0"PHP_INI_SYSTEM
opcache.optimization_level"0xffffffff"PHP_INI_SYSTEM
opcache.inherited_hack"1"PHP_INI_SYSTEM
opcache.dups_fix"0"PHP_INI_ALL
opcache.blacklist_filename""PHP_INI_SYSTEM
opcache.max_file_size"0"PHP_INI_SYSTEM
opcache.consistency_checks"0"PHP_INI_ALL
opcache.force_restart_timeout"180"PHP_INI_SYSTEM
opcache.error_log""PHP_INI_SYSTEM
opcache.log_verbosity_level"1"PHP_INI_SYSTEM
opcache.preferred_memory_model""PHP_INI_SYSTEM
opcache.protect_memory"0"PHP_INI_SYSTEM
opcache.mmap_baseNULLPHP_INI_SYSTEM
opcache.restrict_api""PHP_INI_SYSTEM
opcache.file_cacheNULLPHP_INI_SYSTEM從 PHP 7.0.0 開(kāi)始支持
opcache.file_cache_only"0"PHP_INI_SYSTEM從 PHP 7.0.0 開(kāi)始支持
opcache.file_cache_consistency_checks"1"PHP_INI_SYSTEM從 PHP 7.0.0 開(kāi)始支持
opcache.file_cache_fallback"1"PHP_INI_SYSTEM從 PHP 7.0.0 開(kāi)始支持
opcache.validate_permission"0"PHP_INI_SYSTEM從 PHP 7.0.14 開(kāi)始支持
opcache.validate_root"0"PHP_INI_SYSTEM從 PHP 7.0.14 開(kāi)始支持

個(gè)人覺(jué)得這種文章相當(dāng)有指導(dǎo)意義,所以特地把它的設(shè)置方式摘譯如下(格式有些修改)。

opcache.revalidate_freq

這個(gè)選項(xiàng)用于設(shè)置緩存的過(guò)期時(shí)間(單位是秒),當(dāng)這個(gè)時(shí)間達(dá)到后,opcache會(huì)檢查你的代碼是否改變,如果改變了PHP會(huì)重新編譯它,生成新的opcode,并且更新緩存。值為“0”表示每次請(qǐng)求都會(huì)檢查你的PHP代碼是否更新(這意味著會(huì)增加很多次stat系統(tǒng)調(diào)用,譯注:stat系統(tǒng)調(diào)用是讀取文件的狀態(tài),這里主要是獲取最近修改時(shí)間,這個(gè)系統(tǒng)調(diào)用會(huì)發(fā)生磁盤(pán)I/O,所以必然會(huì)消耗一些CPU時(shí)間,當(dāng)然系統(tǒng)調(diào)用本身也會(huì)消耗一些CPU時(shí)間)??梢栽陂_(kāi)發(fā)環(huán)境中把它設(shè)置為0,生產(chǎn)環(huán)境下不用管,因?yàn)橄旅鏁?huì)介紹另外一個(gè)設(shè)置選項(xiàng)。

opcache.validate_timestamps

當(dāng)這個(gè)選項(xiàng)被啟用(設(shè)置為1),PHP會(huì)在opcache.revalidate_freq設(shè)置的時(shí)間到達(dá)后檢測(cè)文件的時(shí)間戳(timestamp)。

如果這個(gè)選項(xiàng)被禁用(設(shè)置為0),opcache.revalidate_freq會(huì)被忽略,PHP文件永遠(yuǎn)不會(huì)被檢查。這意味著如果你修改了你的代碼,然后你把它更新到服務(wù)器上,再在瀏覽器上請(qǐng)求更新的代碼對(duì)應(yīng)的功能,你會(huì)看不到更新的效果,你必須得重新加載你的PHP(使用kill -SIGUSR2強(qiáng)制重新加載)。

這個(gè)設(shè)定是不是有些蛋疼,但是我強(qiáng)烈建議你在生產(chǎn)環(huán)境中使用,why?因?yàn)楫?dāng)你在更新服務(wù)器代碼的時(shí)候,如果代碼較多,更新操作是有些延遲的,在這個(gè)延遲的過(guò)程中必然出現(xiàn)老代碼和新代碼混合的情況,這個(gè)時(shí)候?qū)τ脩?hù)請(qǐng)求的處理必然存在不確定性。

opcache.max_accelerated_files

這個(gè)選項(xiàng)用于控制內(nèi)存中最多可以緩存多少個(gè)PHP文件。這個(gè)選項(xiàng)必須得設(shè)置得足夠大,大于你的項(xiàng)目中的所有PHP文件的總和。我的代碼庫(kù)大概有6000個(gè)PHP文件,所以我把這個(gè)值設(shè)置為一個(gè)素?cái)?shù)7963。

真實(shí)的取值是在質(zhì)數(shù)集合 { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 } 中找到的第一個(gè)比設(shè)置值大的質(zhì)數(shù)。 設(shè)置值取值范圍最小值是 200,最大值在 PHP 5.5.6 之前是 100000,PHP 5.5.6 及之后是 1000000。
聽(tīng)起來(lái)好復(fù)雜,但用下面的命令就妥啦

你可以運(yùn)行 find . -type f -print | grep php | wc -l 這個(gè)命令來(lái)快速計(jì)算你的代碼庫(kù)中的PHP文件數(shù)。

opcache.memory_consumption

這個(gè)選項(xiàng)的默認(rèn)值為64MB,我把它設(shè)置為192MB,因?yàn)槲业拇a很大。你可以通過(guò)調(diào)用opcachegetstatus()來(lái)獲取opcache使用的內(nèi)存的總量,如果這個(gè)值很大,你可以把這個(gè)選項(xiàng)設(shè)置得更大一些。

opcache.interned_strings_buffer

這是一個(gè)很有用的選項(xiàng),但是似乎完全沒(méi)有文檔說(shuō)明。PHP使用了一種叫做字符串駐留(string interning)的技術(shù)來(lái)改善性能。例如,如果你在代碼中使用了1000次字符串“foobar”,在PHP內(nèi)部只會(huì)在第一使用這個(gè)字符串的時(shí)候分配一個(gè)不可變的內(nèi)存區(qū)域來(lái)存儲(chǔ)這個(gè)字符串,其他的999次使用都會(huì)直接指向這個(gè)內(nèi)存區(qū)域。這個(gè)選項(xiàng)則會(huì)把這個(gè)特性提升一個(gè)層次——默認(rèn)情況下這個(gè)不可變的內(nèi)存區(qū)域只會(huì)存在于單個(gè)php-fpm的進(jìn)程中,如果設(shè)置了這個(gè)選項(xiàng),那么它將會(huì)在所有的php-fpm進(jìn)程中共享。在比較大的應(yīng)用中,這可以非常有效地節(jié)約內(nèi)存,提高應(yīng)用的性能。

這個(gè)選項(xiàng)的值是以兆字節(jié)(megabytes)作為單位,如果把它設(shè)置為16,則表示16MB,默認(rèn)是4MB,這是一個(gè)比較低的值。

opcache.fast_shutdown

另外一個(gè)很有用但也沒(méi)有文檔說(shuō)明的選項(xiàng)。從字面上理解就是“允許更快速關(guān)閉”。它的作用是在單個(gè)請(qǐng)求結(jié)束時(shí)提供一種更快速的機(jī)制來(lái)調(diào)用代碼中的析構(gòu)器,從而加快PHP的響應(yīng)速度和PHP進(jìn)程資源的回收速度,這樣應(yīng)用程序可以更快速地響應(yīng)下一個(gè)請(qǐng)求。把它設(shè)置為1就可以使用這個(gè)機(jī)制了。

最終我們對(duì)于opcache在php.ini的設(shè)置如下:

開(kāi)發(fā)模式下推薦,直接禁用opcache擴(kuò)展更好

opcache.revalidate_freq=0
opcache.validate_timestamps=1
opcache.max_accelerated_files=3000
opcache.memory_consumption=192
opcache.interned_strings_buffer=16
opcache.fast_shutdown=1

多臺(tái)機(jī)器集群模式或者代碼更新頻繁時(shí)推薦,可以兼顧性能,方便代碼更新

opcache.revalidate_freq=300
opcache.validate_timestamps=1
opcache.max_accelerated_files=7963
opcache.memory_consumption=192
opcache.interned_strings_buffer=16
opcache.fast_shutdown=1

穩(wěn)定項(xiàng)目推薦,性能最好

opcache.revalidate_freq=0
opcache.validate_timestamps=0
opcache.max_accelerated_files=7963
opcache.memory_consumption=192
opcache.interned_strings_buffer=16
opcache.fast_shutdown=1


如對(duì)本文有疑問(wèn),請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答??! 點(diǎn)擊進(jìn)入論壇

發(fā)表評(píng)論 (386人查看0條評(píng)論)
請(qǐng)自覺(jué)遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
昵稱(chēng):
最新評(píng)論
------分隔線(xiàn)----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢(xún)

· 技術(shù)支持
· 服務(wù)時(shí)間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號(hào)