简单配置优化LAMP(2)

前文写了简单配置优化LAMP(可以阅读上一篇再上一篇),但是发现优化后由于vps只有256MB内存,内存占用率还是很高,分析发现问题不是PHP和MySQL占用了过多的内存,主要是Apache服务器prefork的多个httpd占用了大量的内存。还是要继续调小prefork模块的配置参数。(经测试确认MaxClients是apache产生的最多进程数 要做限制不要超过内存大小了)256MB内存最多开20个

一、调小prefork模块配置参数
前文中的配置:
<IfModule prefork.c>
StartServers    5
MinSpareServers  5
MaxSpareServers  10
ServerLimit   150
MaxClients   20
MaxRequestsPerChild 1000
</IfModule>

StartServers、MinSpareServers以1为单位递减,MaxSpareServers以2为单位递减,测试3组,vps已安装好wordpress:
第一组

StartServers   5
MinSpareServers 5
MaxSpareServers 10

物理内存基本占满,swap分区也占了至少50%。

第二组

StartServers   4
MinSpareServers 4
MaxSpareServers 8

物理内存占用93%左右,基本不占用swap分区。

第三组

StartServers   3
MinSpareServers 3
MaxSpareServers 6

物理内存占用84%左右,基本不占用swap分区。

对于256MB的vps,httpd初始子进程数、最小空闲子进程数、最大空闲子进程数设为第一组,vps卡死。设为第二组,勉强使用。设为第三组,内存占用较合理,还有空余内存可供维护vps的命令使用,要知道一个yum命令也要占不少内存啊。

二、安装eaccelerator PHP预编译加速软件
安装前确定是否已经安装了phpize和gcc,如果没有安装,则运行如下安装命令:

yum install php-devel gcc

由于原来安装的PHP是PHP 5.1.6,eAccelerator最新版0.9.6.1对PHP 5.1有兼容性问题,所以这里安装eAccelerator 0.9.5.3版本,开始安装:

cd /tmp
wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2
tar xjvf eaccelerator-0.9.5.3.tar.bz2
cd eaccelerator-0.9.5.3
/usr/bin/phpize
./configure –enable-eaccelerator=shared –with-php-config=/usr/bin/php-config
make && make install

编译安装后我们会看到屏幕提示的eaccelerator.so所在的目录:

Installing shared extensions:  /usr/lib/php/modules/

安装成功后,编辑php.ini文件,在文件最后加入如下内容:

[eaccelerator]
zend_extension=”/usr/lib/php/modules/eaccelerator.so”
eaccelerator.shm_size=”16″
eaccelerator.cache_dir=”/home/eaccelerator”
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″
eaccelerator.keys = “disk_only”
eaccelerator.sessions = “disk_only”
eaccelerator.content = “disk_only”

注:zend_extension=”/usr/lib/php/modules/eaccelerator.so”表示模块具体位置,eaccelerator.shm_size=”16″表示共享内存大小,eaccelerator.cache_dir=”/home/eaccelerator”表示缓存目录位置。共享内存大小可以自己调整,推荐设置为16或32。

然后建立/home/eaccelerator目录,作为缓存目录,并且设置成777权限:

mkdir /home/eaccelerator
chmod 777 /home/eaccelerator

测试安装是否成功只需要重启apache:

service httpd restart

如果没有报错,则再运行:

php -v

看eaccelerator和版本是否出现在结果中。如果出现了,则安装成功。

三、还可以再减少httpd进程,把省出的内存增加到调大mysql的配置参数,这样可以减少CPU等待mysql检索的时间。
配置如下:

StartServers   2
MinSpareServers 2
MaxSpareServers 4

mysql配置文件my.cnf里调大部分参数:

key_buffer_size = 32M
max_allowed_packet = 2M
table_cache = 64
sort_buffer_size = 1M
net_buffer_length = 8K
read_buffer_size = 1M
read_rnd_buffer_size = 1M
myisam_sort_buffer_size = 16M
thread_cache_size = 2 //add
query_cache_size = 16M //add