问题描述
我有一个 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 。
-
如何达到相同的表现?我喜欢管理界面,我喜欢这么快。我老实说看不出这是一个什么改进,真的很令人沮丧,除非有一些我不知道的超级 Library 。这当然不是我所知道的,也可能没有配置好。
-
假设#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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。