【问题标题】:How does OPcache max_accelerated_files actually work?OPcache max_accelerated_files 是如何工作的?
【发布时间】:2018-04-30 01:15:27
【问题描述】:

也许这是个愚蠢的问题,但我想弄清楚 max_accelerated_files 是如何工作的……

我了解 PHP 网的“描述/说明”

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

但我的问题是,一旦配置了这个号码,它会做什么。它是否为此设置分配内存?如果我们有足够的内存,我们为什么不直接设置数字 1000000 就可以了?如果我们假设将此数字配置为 2000 并且我们有 2010 个文件,会发生什么?他们是否有某种堆栈,并且一旦该文件轮到它就会被缓存?未缓存的文件会怎样?

感谢您的回答

【问题讨论】:

    标签: php opcache


    【解决方案1】:

    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.phprequire ../../include.php 之类的相对路径,可以使用不同的键多次缓存一个文件。避免这种情况的最干净的解决方案是使用适当的自动加载。

    【讨论】:

      猜你喜欢
      • 2013-12-04
      • 2013-12-18
      • 2018-03-10
      • 2014-05-11
      • 2013-06-17
      • 2015-10-25
      • 2023-03-11
      • 2014-12-16
      • 2014-09-22
      相关资源
      最近更新 更多