APC - > APCu/OPCache,性能差

Tal*_*boy 28 php wordpress apc opcache

我有一个m3.xlargeEC2实例,我PHP 5.5.11今天更新了.

有了这个更新,它覆盖php55-pecl-apcphp55-pecl-apcu.

在阅读和实验之后,我的理解是APC已被替换OPCache,除了可以带回来的关键值存储APCu.

在将我的配置调整到看起来合理的东西之后,在登录时使用Wordpress现在非常慢,至少300-900ms更糟糕(前端通过清漆缓存,并且工作完美...但是当你使用管理员时故意不是缓存,而是作为罪恶缓慢).

我升级时做了一系列基准测试,每个步骤的样本量很小.随着我的继续,它的恶化程度越来越差.

  • APC(升级前) -->
  • OPCache +没有APCu -->
  • 用于APCu的OPCache + APCu + WP插件

现在我只是闲着OPCache,没有APCu.

  1. 我怎样才能达到相同的性能?我喜欢管理界面,我喜欢它有多快.老实说,我根本看不出这是一种改进,真的很令人沮丧......除非有一些我不知道的超级图书馆.它当然不是我拥有的,或者可能没有配置好.
  2. 假设#1的答案是'你把它配置成球',那么你会介意看看这个并看看这是否合理?

对于我的设置我使用最新的wordpress,一些大插件,但我不能把它们取下,因为它们很重要.幸运的是,清漆可以完成大部分工作.我的网站根目录有4个内核,16GB内存,~10k文件.我也没有真正的硬核应用程序或除了wordpress之外的任何东西,它是一个相当普通的设置.我认为这是可能有用的东西.

配置:

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.max_wasted_percentage=5
opcache.use_cwd=1
opcache.validate_timestamps=1
opcache.revalidate_freq=0
opcache.revalidate_path=0
opcache.save_comments=0
opcache.load_comments=0
opcache.fast_shutdown=1
opcache.enable_file_override=0
opcache.optimization_level=0xffffffff
opcache.inherited_hack=1
opcache.dups_fix=0
opcache.blacklist_filename=/etc/php-5.5.d/opcache*.blacklist
opcache.max_file_size=2M
opcache.consistency_checks=1
opcache.force_restart_timeout=180
opcache.error_log=/var/log/php-fpm/5.5/opcache.log
opcache.log_verbosity_level=1
opcache.preferred_memory_model=
opcache.protect_memory=0
Run Code Online (Sandbox Code Playgroud)

knr*_*rdk 17

现在,您正在检查每个请求更改的每个文件,这可能不是您想要的生产系统.

我通常只是禁用它(记得在进行更改后重新启动Web服务器):

opcache.validate_timestamps=0
Run Code Online (Sandbox Code Playgroud)

或者,您可以尝试将频率设置为0以外的值并保持启用状态:

opcache.validate_timestamps=1  
opcache.revalidate_freq=300
Run Code Online (Sandbox Code Playgroud)

理论上,这应该只检查每5分钟的变化.


小智 7

你也有

opcache.consistency_checks=1
Run Code Online (Sandbox Code Playgroud)

根据文档说,这会降低性能.把它关掉.

opcache.consistency_checks integer

如果非零,OPcache将每N个请求验证缓存校验和,其中N是此配置指令的值.这只应在调试时启用,因为它会影响性能.


小智 5

从负责将OPCache集成到PHP中的RFC:

APC可以回收旧的无效脚本的内存.APC使用内存管理器,可以回收与不再使用的脚本相关的内存; 优化器+的工作方式不同,并将此类内存标记为"脏",但从未实际回收它.一旦脏百分比超过可配置的阈值 - 优化器+重新启动自身.请注意,此行为具有稳定性优点和缺点.

我的猜测是你达到触发操作码缓存重启的阈值.

参考:https://wiki.php.net/rfc/optimizerplus#advantages_of_apc_over_optimizer