提醒:本页面将不再更新、维护或者支持,文章、评论所叙述内容存在时效性,涉及技术细节或者软件使用方面不保证能够完全有效可操作,请谨慎参考!

一台小内存的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 很好很强大。