也许这是一个愚蠢的问题,但我试图弄清楚 max_accelerated_files 实际是如何工作的......
我理解 PHP net 的“描述/说明”
opcache.max_accelerated_files 整数 OPcache 哈希表中键(以及脚本)的最大数量。使用的实际值将是素数集合 { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 } 中大于或等于配置值的第一个数字。最小值为 200。 PHP < 5.5.6 中最大值为 100000,更高版本中为 1000000。
但我的问题是配置后它会如何处理这个数字。它是否为此设置分配内存?如果我们有足够的内存,为什么我们不直接设置数字 1000000 就这样呢?如果我们将此数字配置为 2000 并且我们有 2010 个文件,会发生什么情况?它们是否对堆栈进行某种排序,一旦该文件发生变化,它就会被缓存?未缓存的文件会发生什么情况?
谢谢您的回答
OPCache 将缓存的脚本存储在 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.php请记住,如果需要使用或等相对路径,可以使用不同的键多次缓存一个文件require ../../include.php。避免这种情况的最干净的解决方案是使用适当的自动加载。
| 归档时间: |
|
| 查看次数: |
3183 次 |
| 最近记录: |