PHP:Require_once():无法为池错误和解决方案分配内存
我在带有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