- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
也许这是个愚蠢的问题,但我正在尝试弄清楚 max_accelerated_files 实际上是如何工作的...
我理解来自 PHP net 的“说明/说明”
opcache.max_accelerated_files integer The maximum number of keys (and therefore scripts) in the OPcache hash table. The actual value used will be the first number in the set of prime numbers { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 } that is greater than or equal to the configured value. The minimum value is 200. The maximum value is 100000 in PHP < 5.5.6, and 1000000 in later versions.
但我的问题是配置后它会如何处理这个数字。它是否为此设置分配内存?为什么我们不设置数字 1000000 如果我们有足够的内存就可以了?如果我们假设将此数字配置为 2000 并且我们有 2010 个文件,会发生什么情况?他们是否对堆栈进行了某种排序,一旦该文件被缓存,它就会被缓存?未缓存的文件会怎样?
谢谢你的回答
最佳答案
OPCache 将缓存的脚本存储在 HashTable 中,这是一种查找时间非常快(平均)的数据结构,因此可以快速检索缓存的脚本。 max_accelerated_files
表示可以存储在此哈希表中的最大键数。您可以将其视为关联数组中键的最大数量。为此分配的内存是 OPCache 可以使用的共享内存的一部分,您可以使用 opcache.memory_consumption
选项对其进行配置。当 OPCache 尝试缓存比可用键数更多的脚本时,它会触发重启并清理当前缓存。
假设您将 opcache.max_accelerated_files
配置为 223,并且对您的 /home
的请求路由解析并缓存到 OPCache 200 脚本中。只要您的下一个请求只需要那 200 个脚本,OPCache 就可以了。但是,如果以下请求之一解析了 24 个新脚本,OPCache 将触发重新启动以为缓存这些脚本腾出空间。由于您不希望这种情况发生,因此您应该监视 OPCache 并选择一个合适的数字。
请记住,如果需要使用诸如 require include.php
或 require ../../include.php 之类的相对路径,一个文件可以使用不同的键多次缓存
。避免这种情况的最干净的解决方案是使用适当的自动加载。
关于php - OPcache max_accelerated_files 实际上是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47330690/
也许这是个愚蠢的问题,但我正在尝试弄清楚 max_accelerated_files 实际上是如何工作的... 我理解来自 PHP net 的“说明/说明” opcache.max_accelerat
我是一名优秀的程序员,十分优秀!