【问题标题】:What's the PHP APC cache's apc.shm_strings_buffer setting for?PHP APC 缓存的 apc.shm_strings_buffer 设置有什么用?
【发布时间】:2013-06-09 12:15:55
【问题描述】:

我正在尝试了解 apc.ini 中的 apc.shm_strings_buffer 设置。重新启动 PHP 后,APC 管理中的饼图显示 8MB 的缓存已被使用,即使没有缓存条目(当然 apc.php 除外)。我发现这与 apc.shm_strings_buffer 设置有关。

谁能帮我理解设置的含义?配置文件指出这是“为字符串保留的共享内存大小,带有 M/G 后缀”,但我无法理解。

我正在使用 APC 和 PHP-FPM。

【问题讨论】:

    标签: apc php php-internals


    【解决方案1】:

    容易解释的是“带 M/G 后缀”,这意味着如果将其设置为 8M,则将分配 8 MB,或者 1G 将分配 1 GB 内存。

    更难解释的是,它是一个缓存,用于存储 APC 在编译和缓存操作码时在内部使用的字符串。

    引入了配置值in this change,大部分更改是将apc_string.c 添加到APC 项目中。该 C 文件中定义的主要函数是 apc_new_interned_string,然后在 apc_compile.c 中的 apc_string_pmemcpy 中使用。 APC 模块的其余部分用于存储字符串。

    例如在 apc_compile.c 中

    /* private members are stored inside property_info as a mangled
     * string of the form:
     *      \0<classname>\0<membername>\0
     */
    CHECK((dst->name = apc_string_pmemcpy((char *)src->name, src->name_length+1, pool TSRMLS_CC)));
    

    当 APC 去存储一个字符串时,函数apc_new_interned_string 通过对该字符串进行哈希处理来查看该字符串是否已经保存在内存中,如果它已经存储在内存中,它会返回之前的实例存储的字符串。

    仅当该字符串尚未存储在缓存中时,才会分配一块新的内存来存储该字符串。

    如果您使用 PHP-FPM 运行 PHP,我 90% 确信存储字符串的缓存在单个池中的所有工作人员之间共享,但我仍在仔细检查。

    分配给存储共享字符串的整个大小是在 PHP 启动时分配的——它不是动态分配的。因此,尽管实际上几乎没有任何字符串被缓存,但 APC 显示用于字符串缓存的 8MB 是意料之中的。

    编辑

    虽然这回答了它的作用,但我不知道如何查看共享字符串缓冲区的使用量,因此无法知道它应该设置为什么。 p>

    【讨论】:

    • 您的回答确实让事情变得更清楚了,尽管内部使用的字符串缓存的概念仍然让我感到困惑(这就是为什么我花了一段时间才发表评论)。对于三年前引入的更改,关于它的可用信息非常少,所以,就像你说的,我真的不知道将它设置为什么(我想我会坚持使用 8M 默认值?) .
    • 当然为什么不 :) 顺便说一句,我刚刚发现 apc 缓存已被弃用,因为它没有处于积极开发中,并且正在被已重命名为 OPCache 的 ZendOptimizer 所取代,只要一切现在工作我就离开它。顺便说一句,OPCache 确实有不错的文档github.com/zendtech/ZendOptimizerPlus/blob/master/README
    • 很高兴知道,谢谢。不知道我是怎么想的,因为 APC 工作得很好,而且 OPCache 显然没有用户缓存。无论如何,感谢您的帮助,我认为您的回答尽可能地解决了问题,所以我现在将其标记为这样。
    • 我处于相同的位置 - 我使用 APC,它可以工作,而且我还使用它在本地缓存用户数据。继续使用 APC 处理用户数据的项目 github.com/krakjoe/apcu 似乎还没有准备好迎接黄金时段 - 所以我打算坚持使用 APC 至少 6 个月。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多