2016-07-11 47 views
3

我知道APC正在被OpCache所取代。我启用了这个模块,目前所有工作都已经开始。但是,关于如何调整以获得最佳性能的文档很少。PHP Opcache更换策略

我的系统目前有很多需要缓存的文件。所以如果这些文件使它缓存,那么一切都很好。但是,如果达到最大值,我有很多文件可能不需要缓存。

最好我想缓存将有最高命中率的文件。因此,如果有的话,知道Opcache使用的替代策略是很好的。如何解决缓存中没有最常用文件的问题。任何FIFO,LRU,都可以用于我的系统,但我还没有发现任何文档。

任何帮助,将不胜感激!

回答

4

替换策略

不要指望一个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 - 这是一种更快地调用解构器的技巧。打开。
+1

这是一个很好的答案。谢谢! – timhysniu

+0

很高兴我能帮忙:) –