替換策略
不要指望一個FIFO或LRU。那東西不會那樣工作。操作碼緩存在第一次訪問PHP文件時存儲代碼,在內部優化代碼並基於時間間隔和文件修改標記以及使用的內存來決定是否更新緩存中的文件。
所以關鍵問題:要緩存多少個文件?存儲多少內存?內部代碼優化是什麼?如何排除文件?它什麼時候會刷新文件?如果你想深入瞭解的OpCache,你會發現通過朱利安聖保利這裏一個偉大的新手必看:http://jpauli.github.io/2015/03/05/opcache.html
我如何解決沒有最經常使用的文件高速緩存中的問題。
我會增加內存和最大文件設置,直到這些文件被緩存。
但是,如果達到最大值,我有很多文件,我可能不想在緩存中。
opcache.blacklist_filename
來救援。您可以使用黑名單文件來描述哪些文件不應加速。
重要說明:使用opcache-invalidate()函數不能觸發緩存刪除。這將標記一個已經緩存的文件,用於重新編譯和重新添加到緩存(重新編譯/刷新)。從緩存中完全刪除文件需要重置或重新啓動;這總是導致一個高峯。
的OpCache Readme包含以下提醒:
速度調整
我們推薦以下配置選項以獲得最佳性能 在生產環境中。
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
您還可以添加以下,但它可能會破壞某些應用程序和 框架。請閱讀這些指令的描述並自行添加 風險。
上有很少的文檔如何調整這個以獲得最佳性能
戰略性能調優
找到最佳的設置是基於很多東西。您可以使用A/B或A/B/C測試策略來爲配置指令找到合適的值。
您的出發點是一個激活的OpCache,其默認設置爲運行性能測試A.然後,您將調整或調整一些OpCache指令以更改緩存行爲並運行性能測試B.最後,您可以比較結果並繪製一個結論,如果指令的變化產生你想要的結果並提高性能。
緩存熱身
當緩存爲空運行腳本,行進的「熱路徑」(應用程序的常用路徑)。這確保了底層文件從一開始就具有緩存覆蓋率。
GUI工具
要看到統計數據,緩存文件和使用,也將使用OpCache「督察」的一個記憶。這爲您提供了一個概述,並使您能夠找到要從緩存中排除的文件。
一些性能相關的指令
http://php.net/manual/de/opcache.configuration.php
opcache.memory_consumption
。默認是64MB。你可以舉起它。
opcache.max_accelerated_files
- 最大數量的緩存文件。要找出文件的數量:find . -type f -print | grep php | wc -l
。
- 重要的是
opcache.optimization_level
指令。有關詳細信息,請參見https://stackoverflow.com/a/21291587/1163786
opcache.interned_strings_buffer
- 優化程序使用一種名爲字符串interning的技術來提高性能。這基本上意味着,如果您的應用程序使用字符串「Hello World」100次,字符串將只存儲1次,這將節省99個字符串存儲空間,並導致對99個已存在的值進行99次存取。 4MB
是默認值。嘗試8,12,16。
opcache.validate_timestamps=0
意味着額外的統計調用被刪除。
opcache.save_comments
- 您的應用程序是否在評論中使用docblock註釋?如果沒有,請關閉。這節省了內存。
opcache.load_comments
- 註釋要麼在緩存中,要麼取決於opcache.save_comments。該指令意味着「不加載緩存的評論」。似乎東西得到緩存,這是從來沒有使用過。我必須管理,我沒有得到這個指令的用例。換句話說:我使用opache.save_comments
來控制評論的添加。
opcache.fast_shutdown
- 這是一種更快地調用解構器的技巧。打開。
這是一個很好的答案。謝謝! – timhysniu
很高興我能幫忙:) –