OPcache max_accelerated_files如何实际工作?

时间:2017-11-16 13:18:13

标签: php opcache

也许这是一个愚蠢的问题,但我想弄清楚max_accelerated_files实际上是如何工作的......

我理解"说明/说明"来自PHP net

  

opcache.max_accelerated_files整数最大键数(和   因此脚本)在OPcache哈希表中。使用的实际值   将是素数集中的第一个数字{223,463,983,   1979,3907,7​​963,16229,32531,65407,130987}大于   或等于配置的值。最小值是200   PHP中的最大值为100000< 5.5.6和更高版本的1000000。

但我的问题是,一旦配置了这个号码它会做什么。它是否为此设置分配内存?为什么我们不设置数字1000000,如果我们有足够的内存呢?如果我们让这个数字配置为2000并且我们有2010个文件会发生什么?他们是一些排序堆栈,一旦它的文件转为它被缓存? un缓存文件会发生什么?

感谢您的回答

1 个答案:

答案 0 :(得分:1)

OPCache将高速缓存的脚本存储在HashTable中,HashTable是一种具有非常快的查找时间(平均)的数据结构,因此可以快速检索高速缓存的脚本。 max_accelerated_files表示可以在此HashTable中存储的最大密钥数。您可以将其视为关联数组中键的最大数目。为此分配的内存是OPCache可以使用的共享内存的一部分,您可以使用opcache.memory_consumption选项对其进行配置。当OPCache尝试缓存的脚本数量超过可用键数时,它将触发重新启动并清除当前缓存。

因此,仅假设您将opcache.max_accelerated_files配置为223,并且对您的/home路由解析和高速缓存到OPCache 200脚本的请求进行了配置。只要您的下一个请求只需要那200个脚本,OPCache就可以了。但是,如果以下请求之一解析了24个新脚本,则OPCache会触发重新启动以腾出空间来缓存这些脚本。由于您不希望发生这种情况,因此应该监视OPCache并选择适当的数字。

请记住,如果需要使用require include.phprequire ../../include.php等相对路径,可以使用不同的密钥多次缓存一个文件。避免这种情况的最干净的解决方案是使用适当的自动加载。