摘要:當這個選項被啟用設置為,會在設置的時間到達后檢測文件的時間戳。設置值取值范圍最小值是,最大值在之前是,及之后是。這個選項的值是以兆字節作為單位,如果把它設置為,則表示,默認是,這是一個比較低的值。
在網上無意中看到的一篇文章,這哥們非常簡潔地談論了zend opcache的最佳設置,他說他為此花了大量的時間探索zend opcache的每個設置選項的細節,甚至是閱讀它的源代碼,并且在自己的項目中實踐(一個每天有117 million的HTTP請求的應用)。
Opcache優化在著名的《modern php》 中也有重要篇幅。在PHP文檔也有詳細介紹:http://php.net/manual/zh/opcache.configuration.php#ini.opcache.revalidate-freq
個人覺得這種文章相當有指導意義,所以特地把它的設置方式摘譯如下(格式有些修改)。
opcache.revalidate_freq這個選項用于設置緩存的過期時間(單位是秒),當這個時間達到后,opcache會檢查你的代碼是否改變,如果改變了PHP會重新編譯它,生成新的opcode,并且更新緩存。值為“0”表示每次請求都會檢查你的PHP代碼是否更新(這意味著會增加很多次stat系統調用,譯注:stat系統調用是讀取文件的狀態,這里主要是獲取最近修改時間,這個系統調用會發生磁盤I/O,所以必然會消耗一些CPU時間,當然系統調用本身也會消耗一些CPU時間)。可以在開發環境中把它設置為0,生產環境下不用管,因為下面會介紹另外一個設置選項。
opcache.validate_timestamps當這個選項被啟用(設置為1),PHP會在opcache.revalidate_freq設置的時間到達后檢測文件的時間戳(timestamp)。
如果這個選項被禁用(設置為0),opcache.revalidate_freq會被忽略,PHP文件永遠不會被檢查。這意味著如果你修改了你的代碼,然后你把它更新到服務器上,再在瀏覽器上請求更新的代碼對應的功能,你會看不到更新的效果,你必須得重新加載你的PHP(使用kill -SIGUSR2強制重新加載)。
這個設定是不是有些蛋疼,但是我強烈建議你在生產環境中使用,why?因為當你在更新服務器代碼的時候,如果代碼較多,更新操作是有些延遲的,在這個延遲的過程中必然出現老代碼和新代碼混合的情況,這個時候對用戶請求的處理必然存在不確定性。
opcache.max_accelerated_files這個選項用于控制內存中最多可以緩存多少個PHP文件。這個選項必須得設置得足夠大,大于你的項目中的所有PHP文件的總和。我的代碼庫大概有6000個PHP文件,所以我把這個值設置為一個素數7963。
真實的取值是在質數集合 { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 } 中找到的第一個比設置值大的質數。 設置值取值范圍最小值是 200,最大值在 PHP 5.5.6 之前是 100000,PHP 5.5.6 及之后是 1000000。
聽起來好復雜,但用下面的命令就妥啦
你可以運行 find . -type f -print | grep php | wc -l 這個命令來快速計算你的代碼庫中的PHP文件數。
opcache.memory_consumption這個選項的默認值為64MB,我把它設置為192MB,因為我的代碼很大。你可以通過調用opcachegetstatus()來獲取opcache使用的內存的總量,如果這個值很大,你可以把這個選項設置得更大一些。
opcache.interned_strings_buffer這是一個很有用的選項,但是似乎完全沒有文檔說明。PHP使用了一種叫做字符串駐留(string interning)的技術來改善性能。例如,如果你在代碼中使用了1000次字符串“foobar”,在PHP內部只會在第一使用這個字符串的時候分配一個不可變的內存區域來存儲這個字符串,其他的999次使用都會直接指向這個內存區域。這個選項則會把這個特性提升一個層次——默認情況下這個不可變的內存區域只會存在于單個php-fpm的進程中,如果設置了這個選項,那么它將會在所有的php-fpm進程中共享。在比較大的應用中,這可以非常有效地節約內存,提高應用的性能。
這個選項的值是以兆字節(megabytes)作為單位,如果把它設置為16,則表示16MB,默認是4MB,這是一個比較低的值。
opcache.fast_shutdown另外一個很有用但也沒有文檔說明的選項。從字面上理解就是“允許更快速關閉”。它的作用是在單個請求結束時提供一種更快速的機制來調用代碼中的析構器,從而加快PHP的響應速度和PHP進程資源的回收速度,這樣應用程序可以更快速地響應下一個請求。把它設置為1就可以使用這個機制了。
最終我們對于opcache在php.ini的設置如下:
開發模式下推薦,直接禁用opcache擴展更好
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
多臺機器集群模式或者代碼更新頻繁時推薦,可以兼顧性能,方便代碼更新
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
穩定項目推薦,性能最好
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
via: http://gywbd.github.io/posts/2016/1/best-config-for-zend-opcache.html
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21733.html
摘要:概述字節碼緩存不是的新特性,有很多獨立的擴展可以實現,比如和等,但是截至目前這些擴展都沒有集成到內核,從開始,內置了字節碼緩存功能,名為。開始之前,我們先來看看什么是字節碼緩存,以及字節碼緩存的作用是什么。該函數將重置整個字節碼緩存。 概述 字節碼緩存不是PHP的新特性,有很多獨立的擴展可以實現,比如APC、eAccelerator和Xache等,但是截至目前這些擴展都沒有集成到PHP...
摘要:怎樣才算是高性能的應用性能和速度不是一對同義詞。紅線表示針對速度進行了優化的腳本,藍線是可擴展性優先的腳本。將任何這些功能置于循環中可能會導致性能問題。完整的代碼檢測評估雖然可能很耗時,但它可以為你提供有關應用程序性能的深入信息。 showImg(https://segmentfault.com/img/bVNxDn?w=900&h=500);程序員都喜歡最新的PHP 7,因為它使PH...
摘要:昨晚線上出故障,緊急處理切換容災后緩解了故障,解決故障后從容災切換回正式服務時發現文件更新無效,重啟后才生效。查看昨晚的日志,更新不生效持續時間遠遠大于秒,所以這個檢測間隔時間的問題可以了,我們繼續。 昨晚線上出故障,緊急處理切換容災后緩解了故障,解決故障后從容災切換回正式服務時發現PHP文件更新無效,重啟FPM后才生效。下面記錄復盤追查的過程。 因為是PHP文件更新不生效,所以馬上懷...
摘要:鳥哥點評相對于主要優化也是在。基于的腳本測試未開啟取平均值取平均值開啟取平均值取平均值在本次測試中,未開啟的情況下,性能比略有提升,開啟之后,比有很大的提升。測試結果和配置參數以及服務器配置有關,僅供對比與的性能。 直播好久沒有曝光量了,自薦一波《PHP進階之路》(PHPer們,好久沒有投資自己了呢?)原文地址 https://mengkang.net/1019.html PHP7.2...
摘要:從開始,內置了字節碼緩存功能,名為。因為是解釋性語言,解釋器執行腳本時會解析腳本代碼,生成一系列的操作碼,然后執行字節碼,每次的請求都是這樣,會消耗很多資源,使用字節碼緩存可以緩存預先編譯的字節碼,減少響應時間,降低系統資源的壓力。 Zend OPcache 1).從PHP5.0開始,內置了字節碼緩存功能,名為Zend OPcache。因為PHP是解釋性語言,PHP解釋器執行PHP腳本...
閱讀 2484·2023-04-25 19:24
閱讀 1700·2021-11-11 16:54
閱讀 2834·2021-11-08 13:19
閱讀 3547·2021-10-25 09:45
閱讀 2552·2021-09-13 10:24
閱讀 3276·2021-09-07 10:15
閱讀 4014·2021-09-07 10:14
閱讀 2950·2019-08-30 15:56