PHP 5.6:“opcache:内部字符串缓冲区溢出”是什么意思?

PHP 5.6:“opcache:内部字符串缓冲区溢出”是什么意思?

我正在运行 PHP 5.6 并启用了内置模块 opcache。现在,当我阅读错误日志中的警告时,每隔几毫秒就会收到这些消息:

Warning Interned String buffer overflow

没有关于此错误的描述这个谷歌搜索。然而,源代码说,可能内存不足? 我读得对吗?

因此,据我所知,如果缓存耗尽,并且将被重新使用/回收用于新字符串,这是绝对没问题的。如果不是,我遗漏了什么?

我将其设置opcache.interned_string_buffer为 4 到 8 MiB,但还没有成功。

答案1

opcache.interned_strings_buffer - 一个非常简洁的设置,几乎没有文档。PHP 使用一种称为字符串驻留的技术来提高性能 - 因此,例如,如果您的代码中有 1000 次字符串“foobar”,则 PHP 内部将为该字符串存储 1 个不可变变量,并在您使用它的另外 999 次时仅使用指向它的指针。太棒了。此设置将其提升到一个新的水平 - 而不是为每个单个 php-fpm 进程设置一个这些不可变字符串的池,此设置在所有 php-fpm 进程之间共享它。它可以节省内存并提高性能,尤其是在大型应用程序中。

https://www.scalingphpbook.com/best-zend-opcache-settings-tuning-config/

答案2

存在一个正在发生的错误当 opcache.interned_string_buffer 设置得不够高时,这会影响一些用户。该错误会导致 Apache 崩溃,因此如果您遇到此问题,您肯定会知道。

我建议临时创建一个 php 文件(例如 info.php)并添加

<?php phpinfo(); ?>

在浏览器中查看文件,轻松查看“Interned Strings Used memory”,并确保您有一些可用内存。我有一个相当大的 wordpress 网站,我的内存限制设置为 32。我一直使用大约 14mb 的 interned strings 内存。

相关内容