3

据我了解这些设置:

opcache.validate_timestamps=0
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=3907
opcache.blacklist_filename=/blacklisted_files

应该提高性能(根据链接:123)。我实际上不确定最后 2 个,在我的情况下,“internet_strings_buffer”设置值“4”可能永远不会被填充(因此不会给出更好的结果),但“validate_timestamps”应该消除 stat() 函数开销,因此给我更好性能,但根据我对 JMeter 的测试,我无法验证这一点。每个设置单独比默认设置差。

我知道“性能设置”可能不会改善很多,但我认为它的性能应该不会更差(每个请求的差异约为 +2 毫秒)。

问题是:为什么默认设置比性能/推荐设置更好?

OPcache 是否也比处理更大的内存覆盖/删除/搜索更好(谈论“opcache.memory_consumption”设置)?

4

1 回答 1

4

选项 2 和 3 只是间接地与性能相关,因为它们与操作码缓存的容量有关。如果您当前的使用情况符合默认值,那么除了使用 Opcache 的系统开销略有增加外,您不会看到任何实质性差异。当然,如果当前使用不合适,您将获得好处,因为缓存将具有更大的容量并且您将获得更少的缓存未命中。

选项 4 涉及为 PHP 脚本文件名定义模式,这些文件名是易变的,因此不应被缓存。如果您禁用了时间戳验证,这一点尤其重要,因为 Opcache 不会获取此类更改。

strace选项 1 确实删除了 PHP 进程可以验证的额外 stat() 调用。使用现代 CPU,Linux 内核非常有效地缓存 inode,因此如果节点位于 VFAT 缓存中,这只会节省亚毫秒。您需要很好地构建时序测试来测量这种差异。

Opcache 有一个非常糟糕的重用策略:它不会打扰。缓存会慢慢填满,填满后会全部刷新并从头开始重建。

于 2014-12-07T11:45:03.083 回答