解决PHP加速器eAccelerator导致php-cgi占用内存过多的问题

!本文可能 超过1年没有更新,今后内容也许不会被维护或者支持,部分内容可能具有时效性,涉及技术细节或者软件使用方面,本人不保证相应的兼容和可操作性。

一台小内存的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左右的缓冲内存了。

eAccelerator control.php

关于小内存VPS配置可以参考《Bootstraping WordPress/Nginx/PHP/MySQL on a Cheap VPS with lowendscript》,其中的lowendscript很好很强大。

若无特别说明,本网站文章均为原创,原则上这些文章不允许转载,但是如果阁下是出于研究学习目的可以转载到阁下的个人博客或者主页,转载遵循创作共同性“署名-非商业性使用-相同方式共享”原则,请转载时注明作者出处谢绝商业性、非署名、采集站、垃圾站或者纯粹为了流量的转载。谢谢合作!

  1. 你好,我们也在使用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]#

请稍后...

发表评论

电子邮件地址不会被公开。 必填项已用*标注