30

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

在此更新中,它php55-pecl-apcphp55-pecl-apcu.

经过阅读和实验,我的理解是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
4

3 回答 3

19

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

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

opcache.validate_timestamps=0

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

opcache.validate_timestamps=1  
opcache.revalidate_freq=300

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

于 2014-07-18T01:29:51.760 回答
9

You also have

opcache.consistency_checks=1

Which according to the docs says will slow down performance. Turn that off.

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.

于 2014-07-19T13:41:08.620 回答
5

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

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

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

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

于 2014-07-17T06:47:31.447 回答