我知道apc正在被opcache取代。我启用了这个模块,到目前为止一切正常。但是,很少有文档说明如何优化它以获得最佳性能。
我的系统当前有大量文件需要缓存。因此,如果这些文件能够缓存,那么一切都很好。但是,如果达到最大值,我有很多文件,我可能不想在缓存中。
我希望缓存命中率最高的文件。所以,如果知道opcache使用的替换策略是什么,那就太好了。如何解决缓存中没有最常用文件的问题。任何一个fifo,lru,对我的系统都能很好的工作,但是我还没有找到任何关于这个的文档。
任何帮助都将不胜感激!

最佳答案

替代战略
别指望有国际足联或上帝抵抗军。那玩意儿不是那样的。操作码缓存在第一次访问php文件时存储代码,在内部优化代码,并根据时间间隔、文件修改戳和使用的内存来决定是否在缓存中更新文件。
所以关键问题是:要缓存多少文件?存储多少内存?内部代码优化有什么用?如何排除文件?什么时候刷新文件?如果你想深入了解opcache,可以在这里找到julien pauli的一篇很棒的文章: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

您也可以添加以下内容,但它可能会破坏一些应用程序和
框架。请阅读这些指令的说明并添加它们
风险自负。
opcache.save_comments=0
opcache.enable_file_override=1

关于如何优化此项以获得最佳性能的文档很少
性能调整策略
找到最佳设置是基于很多事情。您可以使用A/B或A/B/C测试策略来找到配置指令的良好值。
你的起始点是一个激活的OpCcache,它有一个默认的设置来运行一个性能测试A。然后你会调整或调整一些opcache指令来改变缓存行为并运行性能测试B。最后,你可以比较结果并得出结论。如果对指令的更改产生所需的结果并提高性能。
缓存预热
当缓存为空时,运行一个脚本,该脚本将遍历“热路径”(应用程序的常用路径)。这确保了底层文件从一开始就具有缓存覆盖率。
图形用户界面工具
要查看统计信息、缓存的文件和使用的内存,还可以使用opcache“检查器”之一。这为您提供了一个概述,并使您也可以从缓存中查找要排除的文件。
https://github.com/PeeHaa/OpCacheGUI
https://github.com/rlerdorf/opcache-status
https://github.com/amnuts/opcache-gui
一些与性能相关的指令
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-优化器使用称为字符串实习的技术来提高性能。这基本上意味着,如果您的应用程序100次使用字符串“hello world”,则该字符串将仅存储1次,这将保存99个字符串存储,并导致99次访问已存在的值。4MB是默认值。试试8,12,16。
opcache.validate_timestamps=0表示删除了额外的stat调用。
opcache.save_comments-您的应用程序是否在注释中使用docblock注释?如果没有,请关闭。这样可以节省内存。
opcache.load_comments-注释在缓存中或不在缓存中,这取决于opcache.save_注释。此指令表示“不要加载缓存的注释”。好像东西被缓存了,但从来没用过。我必须管理我没有得到这个指令的用例。换句话说:我使用opache.save_comments来控制注释的添加。
opcache.fast_shutdown-这是一种更快地调用解构器的技术。打开。

关于php - PHP Opcache替换策略,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38317795/

10-09 03:17