问题描述

我有一个 m3.xlarge EC2 实例,我现在更新到 PHP 5.5.11

有了这个更新,它用 php55-pecl-apcu 覆盖了 php55-pecl-apc

阅读和实验后,我的理解是,APC 已被 OPCache 替代,除了可以带回 APCu 的键值存储。

经过调整我的配置,看起来很合理,使用 Wordpress 登录现在是非常缓慢,至少 300-900ms 更糟糕 (前端通过清漆缓存,并且工作完美… 但是当你使用管理员故意没有缓存,慢如罪) 。

当我升级时,我做了一系列的基准测试,每个步骤都有一个小样本。当我继续下去时,它变得越来越糟。

  • APC(升级前)-->

  • OPCache +否 APCu -->

  • 用于 APCU 的 OPCache + APCu + WP 插件

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

  1. 如何达到相同的表现?我喜欢管理界面,我喜欢这么快。我老实说看不出这是一个什么改进,真的很令人沮丧,除非有一些我不知道的超级 Library 。这当然不是我所知道的,也可能没有配置好。

  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

最佳解决思路

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

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

opcache.validate_timestamps=0

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

opcache.validate_timestamps=1
opcache.revalidate_freq=300

理论上讲,这只需要每 5 分钟检查一次。

次佳解决思路

你也有

opcache.consistency_checks=1

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

opcache.consistency_checks integer

If non-zero, OPcache will verify the cache checksum every N requests, where N is the value of this configuration directive. This should only be enabled when debugging, as it will impair performance.

第三种解决思路

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

APC can reclaim memory of old invalidated scripts. APC uses a memory manager and can reclaim memory associated with a script that is no longer in use; Optimizer+ works differently, and marks such memory as 『dirty』, but never actually reclaims it. Once the dirty percentage climbs above a configurable threshold – Optimizer+ restarts itself. Note that this behavior has both stability advantages and disadvantages.

我的猜测是,您正在触发触发操作码缓存重新启动的阈值。

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

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。