解决PHP加速器eAccelerator导致php-cgi占用内存过多的问题
提醒:本页面将不再更新、维护或者支持,文章、评论所叙述内容存在时效性,涉及技术细节或者软件使用方面不保证能够完全有效可操作,请谨慎参考!
一台小内存的VPS,总共才128MB保证内存(Guaranteed RAM),最大256MB的突发内存(Burstable RAM),今天调用 free ,发现内存占用达到150MB~170MB,这还了得,长期占用服务商的突发内存也会被K掉的,使用 ps aux 分析当前的进程列表,找到php-cgi这个进程占用了至少50MB~60MB的内存,这个是PHP的FastCGI服务,我已经将其控制在两个进程范围内了,除了master进程,另外一个php-cgi就占用了大量的内存,看来要好好精简一下了。
首先去掉不必要的扩展,一些当前站点并没有使用到的扩展程序,可以省略,这么一去除,感觉内存没下降多少,我又查阅了一下当前加载的扩展找到了eAccelerator,前面我写过一篇文章 《Debian/CentOS VPS安装PHP加速器eAccelerator笔记》 介绍关于eAccelerator,以及如何获取安装等信息。其实我们可以从其源代码包中找到control.php。将这个文件复制到Web服务器目录下,并且通过浏览器执行,得到一些关于eAccelerator的信息,其中一项Total memory标记的是32MB,下面还有个Memory in use标记的是50%左右已经使用,假如这时再浏览新的PHP页面,这个数据还将上升,直到占满Total memory为止。
查阅 eAccelerator Wiki 后得知,问题出在了当初的配置上,打开eaccelerator.ini,找到 eaccelerator.shm_size 选项,按照之前的配置,这里设置的是0,官方文档上的意思是,设置为0表明使用默认内存占用值,那么这个默认内存占用值是多少呢?其实这个是受Linux系统限制的,Linux系统对于每个进程占用内存数都有最大值限制,你可以通过编辑 /etc/sysctl.conf ,找到 kernel.shmmax 改变这个值。好了,我们不想改动系统配置,现在只有对于这个 eaccelerator.shm_size 做设置了,目前默认占用量是32MB,我觉得削去一半就差不多了,于是这里改为 eaccelerator.shm_size="16" ,然后 invoke-rc.d php-cgi restart 重启了php-cgi,浏览器打开control.php,尝试浏览了几个PHP页面,直到16MB占满为止,然后再调用 free ,发现内存已经控制在100MB左右了,这样就可以有28MB左右的缓冲内存了。
关于小内存VPS配置可以参考 《Bootstraping WordPress/Nginx/PHP/MySQL on a Cheap VPS with lowendscript》 ,其中的 lowendscript 很好很强大。
你好,我们也在使用eaccelerator进行php加速, 可以在eaccelerator的缓存目录中生成了200G的缓存文件,请问是什么情况呢, 希望大侠指点,下面是我的配置文件 [eaccelerator] zend_extension="/usr/local/php/lib/php/extensions/eaccelerator.so" eaccelerator.shm_size="64" eaccelerator.cache_dir="/usr/local/eac_cache" eaccelerator.enable="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="1" eaccelerator.debug="0" eaccelerator.filter="" eaccelerator.shm_max="0" eaccelerator.shm_ttl="3600" eaccelerator.shm_prune_period="3600" eaccelerator.shm_only="0" eaccelerator.compress="1" eaccelerator.compress_level="9" 缓存目录磁盘使用情况: [root@aaa eaccelerator_cache]# du -sh 214G . [root@aaa eaccelerator_cache]# pwd /usr/local/eaccelerator_cache [root@aaa eaccelerator_cache]#
抱歉,暂时没有遇到类似的情况,也没有相关信息可以提供,建议你试试看最新版本的eaccelerator-0.9.6.1,可以参考Debian/CentOS VPS安装PHP加速器eAccelerator笔记 不过后来PHP升级后不支持此版本的eaccelerator了,也没有找到更新版本的了。 或者像这篇文章/tmp becomes full due to eAccelerator files所述设置定时任务定时清理。