Zend OPcache 性能设置与默认设置的比较

3

就我所了解的那些设置:

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

应该改善性能(根据以下链接:123)。我不确定最后两个链接是否正确,在我的情况下,“internet_strings_buffer”设置值“4”可能永远不会填充(因此不会产生更好的结果),但“validate_timestamps”应删除stat()函数开销,从而提高性能,但根据我使用JMeter进行的测试,我无法验证这一点。每个设置单独使用都比默认设置差。

我知道“性能设置”可能并没有多大改进,但我认为它不应该表现更差(每个请求的差异约为+2毫秒)。

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

此外,OPcache是否比较小的内存覆盖/删除/搜索处理得更好(讨论“opcache.memory_consumption”设置)?

1个回答

4
选项2和3只间接与性能有关,因为它们涉及操作码缓存的容量。如果当前使用情况符合默认值,则除了使用Opcache会略微增加系统开销之外,您不会看到任何实质性差异。 当然,如果当前使用情况不符合,则会获得好处,因为缓存容量将更大,您将获得较少的缓存未命中。
选项4与定义PHP脚本文件名模式有关,这些模式是不稳定的,因此不应该被缓存。如果已禁用时间戳验证,则这尤其重要,因为此类更改不会被Opcache捕获。
选项1确实消除了额外的stat()调用,PHP进程的strace可以验证。对于现代CPU,Linux内核相当高效地缓存了inode,因此只有在节点位于VFAT缓存中时才能节省少于毫秒级的时间(如果)。您需要精心构建计时测试以测量此差异。
Opcache具有非常差的重用策略:它并不烦恼。缓存会慢慢填满,并且当满时,它会完全刷新并从头开始重建。

嗨,TerryE,感谢您的回答,我还有一个问题: 您说如果禁用时间戳验证,则选项4很重要,但在选项1中,您说如果将时间戳验证设置为FALSE,则不会删除stat()调用。那么“opcache.validate_timestamps”的真正意义是什么? - R.P
1
不太对,我说的是相反的:将validate_timestamps设置为=0参数意味着stats不会被执行。请参阅源代码库中的Opcache README文件 - TerryE
感谢提供的信息。很抱歉没有更早地接受答案。 - R.P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接