APC - > APCu / OPCache,性能差

时间:2014-04-30 07:56:59

标签: php wordpress apc opcache

我有一个m3.xlarge EC2实例,我今天更新为PHP 5.5.11

通过此次更新,它使用php55-pecl-apc覆盖了php55-pecl-apcu

阅读和试验后,我的理解是APC已替换为OPCache,但可以通过APCu带回的键值存储除外。

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

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

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

现在我只是和OPCache一起闲逛,没有APCu。

  1. 如何才能达到相同的性能?我喜欢管理界面,我喜欢它有多快。老实说,我根本不知道这是一种改进,真的很令人沮丧......除非有一些我不知道的超级图书馆。它当然不是我所拥有的,或者它可能配置得不好。
  2. 假设对#1的回答是“你将它配置为球”,你会介意看看这个并看看这是否合理?
  3. 对于我的设置,我使用了最新的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
    

3 个答案:

答案 0 :(得分:16)

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

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

opcache.validate_timestamps=0

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

opcache.validate_timestamps=1  
opcache.revalidate_freq=300

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

答案 1 :(得分:7)

你也有

opcache.consistency_checks=1

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

  

opcache.consistency_checks integer

     

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

答案 2 :(得分:5)

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

  

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

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

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