PHP:Require_once():无法为池错误和解决方案分配内存

时间:2020-01-09 10:42:20  来源:igfitidea点击:

我在带有APC php-pecl-apc-3.1.9的CentOS/RHEL 6.x上运行PHP版本5.3.3。
但是,我在我的php服务器日志文件中收到以下警告:

[18-Jul-2012 17:00:08] PHP Warning: include_once(): Unable to allocate memory for pool. in //var/www/html/includes/xmlrpc.php on line 55
[18-Jul-2012 17:00:40] PHP Warning: require(): Unable to allocate memory for pool. in /var/www/html/includes/geshi.php on line 2307

如何解决这些PHP警告?

此错误通常与备用PHP缓存(APC)有关。

APC是PHP的免费开放操作码缓存。
其目标是提供一个免费,开放且强大的框架,用于缓存和优化PHP中间代码。

解决方案

编辑文件" /etc/php.d/apc.ini"(Debian和/或者Ubuntu Linux用户编辑" /etc/php5/conf.d/apc.ini"),执行:

# vi /etc/php.d/apc.ini

确保传递给mmap模块的mktemp样式的file_mask是正确且有效的一个:

apc.mmap_file_mask=/tmp/apc.XXXXXX

接下来,确保根据您的要求正确设置每个共享内存段的大小(带有M/G后缀)。
在我的情况下,它设置为8M:

; increased to 96M
apc.shm_size=96M

如果另一个条目需要此缓存条目插槽,则需要调整允许某个缓存条目空闲的秒数:

apc.ttl=3600

如果另一个条目需要此高速缓存条目插槽,则允许用户高速缓存条目在插槽中空闲的秒数:

apc.user_ttl=3600

高速缓存条目可以保留在垃圾收集列表上的秒数。

apc.gc_ttl=3600

保存并关闭文件。
确保根据您的网络应用要求调整值。
重新启动Apache 2 Web服务器:

# service httpd restart

如果您使用Lighttpd而不是Apache2 Web服务器,请重新启动Lighttpd Web服务器:

# service lighttpd restart

如果您使用Nginx而不是Apache2或者Lighttpd,请重新启动Nginx Web服务器:

# service nginx restart

或者

# /usr/local/nginx/sbin/nginx -s reload

提示:找出您的APC内存使用率和命中率

您需要找出确切的内存使用情况和命中率,以便可以根据工作负载设置apc.ttl和apc.shm_size。
将/usr/share/php-pecl-apc/apc.php复制到/var/www/html目录,即Apache DocumentRoot:

# cp /usr/share/php-pecl-apc/apc.php /var/www/html

编辑/var/www/html/apc.php并设置管理员密码:

defaults('ADMIN_PASSWORD','YOUR-NEW-PASSWORD-HERE');

保存并关闭文件。
打开浏览器并输入网址:

http://server-ip-here/apc.php

或者

http://server1.theitroad.local/apc.php