我有一个m3.xlarge
EC2实例,我今天更新为PHP 5.5.11
。
通过此次更新,它使用php55-pecl-apc
覆盖了php55-pecl-apcu
。
阅读和试验后,我的理解是APC
已替换为OPCache
,但可以通过APCu
带回的键值存储除外。
将我的配置调整到看起来合理的东西后,在登录时使用Wordpress现在非常慢,至少300-900ms更糟糕(前端通过清漆缓存,并且工作得很好......但是当你'重新使用管理员它故意不被缓存,并且作为罪恶缓慢。)
我升级时做了一系列基准测试,每个步骤的样本量都很小。随着我的继续,它的恶化程度越来越差。
-->
-->
现在我只是和OPCache一起闲逛,没有APCu。
对于我的设置,我使用了最新的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
答案 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