Zend OPcache 性能设置与默认设置


Zend OPcache performance settings vs default settings

据我所知:

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

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

我知道"性能设置"可能不会有太大改善,但我认为它的性能应该不会更糟(每个请求的差异约为 +2 毫秒(。

问题是:为什么默认设置优于性能/推荐设置?

此外,OPcache 是否比较大的内存更好地处理较小的内存覆盖/删除/搜索(谈论"opcache.memory_consumption"设置(?

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

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

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

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