首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP Opcache替换策略

PHP Opcache替换策略
EN

Stack Overflow用户
提问于 2016-07-11 23:34:24
回答 1查看 920关注 0票数 3

据我所知,APC正被OpCache取代。我启用了这个模块,到目前为止,一切都在工作。但是,很少有文档说明如何对其进行调优以获得最佳性能。

我的系统目前有大量需要缓存的文件。因此,如果这些文件能够缓存,那么一切都很好。但是,如果达到最大值,我可能在缓存中有很多我不想要的文件。

最好我想要缓存的文件,将有最高的命中率。因此,很高兴知道Opcache使用的替换策略是什么,如果有的话。如何解决缓存中没有使用最频繁的文件的问题。任何一个FIFO,LRU,对我的系统都能很好的工作,但是我还没有找到任何关于这个的文档。

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2016-07-12 12:29:09

替换策略

不要期待FIFO或LRU。那东西不是那样起作用的。Opcode缓存在第一次访问PHP文件时存储代码,在内部优化代码,并根据使用的时间间隔、文件修改标记和内存来决定是否更新缓存中的文件。

那么关键的问题是:要缓存多少个文件?存储的内存是多少?内部代码优化是什么?如何排除文件?它什么时候会刷新文件?如果你想深入了解OpCache,你会发现朱利安·保利( Julien )在这里写了一个很棒的文章:http://jpauli.github.io/2015/03/05/opcache.html

如何解决缓存中没有使用最频繁的文件的问题。

我会增加内存和最大文件设置,直到这些文件被缓存。

但是,如果达到最大值,我可能在缓存中有很多我不想要的文件。

  • opcache.blacklist_filename去营救。您可以使用黑名单文件来描述哪些文件不应该加速。

注意:不能使用opcache-失效()函数触发缓存删除。这只会标记一个已经缓存的文件,以便重新编译并重新添加到缓存(重新编译/刷新)。从缓存中完全删除文件需要重置或重新启动,这总是会导致尖峰。

OpCache自述包含以下建议:

调速 为了在生产环境中获得最佳性能,我们推荐以下配置选项。 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测试策略来为配置指令找到良好的值。

您的起点是一个具有默认设置以运行性能测试A的激活OpCache。然后,您将调优或调整一些OpCache指令,以更改缓存行为并运行性能测试B。最后,如果对指令的更改产生所需的结果并提高性能,则可以比较结果并得出结论。

缓存热身

当缓存为空时,运行一个脚本,该脚本运行“热路径”(应用程序中常用的路径)。这就确保底层文件从一开始就具有缓存覆盖率。

GUI工具

要查看统计数据、缓存的文件和使用的内存,还可以使用OpCache“检查器”之一。这为您提供了一个概述,并使您也可以找到从缓存中排除的文件。

一些与性能相关的指令

http://php.net/manual/de/opcache.configuration.php

  • opcache.memory_consumption。默认值为64 is。你可以把它抬高。
  • 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 -优化器使用一种称为字符串实习生的技术来提高性能。这基本上意味着,如果您的应用程序使用字符串"Hello“100次,则该字符串只存储1次,这将保存99个字符串存储,并导致对已有值的99个访问。4MB是默认的。试试8,12,16。
  • opcache.validate_timestamps=0意味着删除额外的stat调用。
  • opcache.save_comments --您的应用程序是否在注释中使用docblock注释?如果没有,就关掉。这节省了记忆。
  • opcache.load_comments -注释要么在缓存中,要么不依赖于opcache.save_comments。该指令的意思是“不要加载缓存的注释”。好像东西被缓存了,这是从来没有用过的。我必须确保我没有得到这个指令的用例。换句话说:我使用opache.save_comments来控制注释的添加。
  • opcache.fast_shutdown --这是一种更快地调用解构函数的技术。打开。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38317795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档