【问题标题】:APC -> APCu / OPCache, performance poorAPC -> APCu / OPCache,性能差
【发布时间】:2014-04-30 07:56:59
【问题描述】:

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

在此更新中,它用php55-pecl-apcu 覆盖了php55-pecl-apc

经过阅读和实验,我的理解是APC已经被替换为OPCache,除了一个键值存储可以用APCu带回来。

在将我的配置调整为看起来合理的配置后,在登录时使用 Wordpress 现在非常慢,至少差 300-900 毫秒(前端通过清漆缓存,并且工作完美......但是当你使用管理员故意不缓存它,而且速度很慢)。

我在升级时进行了一系列基准测试,每个步骤的样本量很小。随着我的继续,它的退化越来越严重。

  • APC(升级前)-->
  • OPCache + 无 APCu -->
  • OPCache + APCu + 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

【问题讨论】:

  • 您确定 OPCache 确实已加载并处于活动状态吗?在里面创建一个带有<?php var_dump(opcache_get_status()); ?> 的文件testopcache.php 并尝试访问它,它应该会告诉您OPCache 是否正在工作。还可以尝试将opcache.max_file_size 增加到5M 甚至更多。
  • 我把它增加到了 10M。它肯定在运行,我看到一个巨大的转储。
  • 您能否备份您当前的安装并尝试删除这些few large plugins 看看是否有任何改变?
  • @Tallboy 我需要看看打包它的人是如何配置 APCu 的,从 src rpm/pkg/whatever 中为我找到配置行 ...

标签: php wordpress apc opcache


【解决方案1】:

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

我通常只是禁用它(更改后记得重启网络服务器):

opcache.validate_timestamps=0

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

opcache.validate_timestamps=1  
opcache.revalidate_freq=300

理论上,这应该仅每 5 分钟检查一次更改。

【讨论】:

    【解决方案2】:

    你也有

    opcache.consistency_checks=1
    

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

    opcache.consistency_checks integer

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

    【讨论】:

      【解决方案3】:

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

      APC 可以回收旧的无效脚本的内存。 APC 使用内存管理器,可以回收与不再使用的脚本相关的内存; Optimizer+ 的工作方式不同,并将此类内存标记为“脏”,但从未真正回收它。一旦脏百分比攀升至可配置阈值以上 - Optimizer+ 将自行重新启动。请注意,这种行为既有稳定性的优点也有缺点。

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

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

      【讨论】:

        猜你喜欢
        • 2015-05-25
        • 1970-01-01
        • 2015-09-18
        • 1970-01-01
        • 1970-01-01
        • 2010-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多