这篇日志注定很短。
现在使用的服务器是 ArchLinux + Apache 2.2.21 + Nginx 1.0.11 + MySQL 5.5.18 + PHP 5.3.8 的环境,详细的PHP探针可以在这里看到。
以上都是直接从Arch的原安装,然后一些组件是自己编译的,简单的方案在之前的这篇和这篇日志中有提及。再加上ftp客户端和后台运行一个ntp进程,apache加载上mod_python
组件,配置好了过后开机内存在72-75M,很满意。但是在运行一段时间(积累了一定量的网页请求)过后,内存就会直逼400,突发状况可以冲到接近500,就算空闲下来也有接近300,这个就有点不爽了。
于是折腾。
根据观察,处在前端的Nginx资源占用一直很小而且稳定,主要占用内存的就是若干httpd进程,那么就着手应对这个了。
在一番Google以及不断实验,重启若干次过后,找到了个人比较满意的配置方案如下~
编辑/etc/httpd/conf/extra/httpd-mpm.conf
找到如下段落并且编辑为这样:
1 2 3 4 5 6 7 |
<IfModule mpm_prefork_module> StartServers 1 MinSpareServers 1 MaxSpareServers 3 MaxClients 120 MaxRequestsPerChild 72 </IfModule> |
然后经过考虑,在/etc/httpd/conf/extra/httpd-default.conf
中把KeepAlive
配成了这样:
1 2 3 |
KeepAlive On MaxKeepAliveRequests 32 KeepAliveTimeout 3 |
其实上面配置的主要一点是,减少httpd进程数量,以及缩短每个httpd进程的生存周期,让内存能在短时间内得到回收;总体来说就是牺牲一部分cpu来换取内存,因为目前vps上cpu基本处于空闲状态而性能上的主要矛盾是内存,所以还是很划算的。
此时,虽然突发内存仍然可以达到300+甚至400+,但在空闲下来的很短时间(大约几十秒)内,内存占用就会迅速降低,最后稳定在200左右。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
top - 11:36:30 up 12 min, 1 user, load average: 0.05, 0.01, 0.00 Tasks: 20 total, 1 running, 19 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1048576k total, 202788k used, 845788k free, 0k buffers Swap: 0k total, 0k used, 0k free, 0k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 15 0 4036 736 644 S 0.0 0.1 0:00.52 init 1119 root 25 0 30840 584 336 S 0.0 0.1 0:00.00 syslog-ng 1120 root 15 0 60588 3672 2652 S 0.0 0.4 0:00.00 syslog-ng 1143 root 15 0 6128 704 596 S 0.0 0.1 0:00.00 crond 1155 root 18 0 39080 1252 736 S 0.0 0.1 0:00.00 sshd 1167 ntp 15 0 14152 924 640 S 0.0 0.1 0:00.00 ntpd 1173 root 20 0 27152 1292 952 S 0.0 0.1 0:00.00 vsftpd 1182 root 25 0 11576 1608 1284 S 0.0 0.2 0:00.01 mysqld_safe 1450 mysql 15 0 53020 7296 5584 S 0.0 0.7 0:00.12 mysqld 1453 root 15 0 60676 3328 2644 S 0.0 0.3 0:00.03 sshd 1467 root 18 0 366m 20m 9584 S 0.0 2.0 0:00.13 httpd 1468 http 25 0 212m 4052 712 S 0.0 0.4 0:00.00 httpd 1478 root 24 0 33084 1564 336 S 0.0 0.1 0:00.00 nginx 1492 http 15 0 53696 22m 1020 S 0.0 2.2 0:00.02 nginx 1494 root 18 0 18364 720 412 S 0.0 0.1 0:00.00 ntpd 1496 root 15 0 17424 2272 1656 S 0.0 0.2 0:00.00 bash 1518 http 16 0 422m 61m 6636 S 0.0 6.0 0:02.59 httpd 1530 http 16 0 390m 31m 6636 S 0.0 3.0 0:02.09 httpd 1558 http 15 0 392m 32m 6496 S 0.0 3.2 0:00.41 httpd 1572 root 18 0 10780 1160 948 R 0.0 0.1 0:00.00 top |
下一步的计划是给wordpress做静态缓存,之前弄过几次,因为我用的是Nginx前端配apache动态所以一直不成功,把这个攻克下来之后性能上应该还会有一定的提升的说~
----UPDATE----
2011-12-20
在VPS上加上了Loli.lu项目的一个副本所以相当于多运行了一个服务器(端口不同),于是现在的格局是:前端Nginx,反向代理处于后端的Apache和loli.lu两个服务器,然后后端的两位都不是很省内存的说,loli.lu启动后占用大概100左右的内存,然后加上apache过后,可以稳定在400-450之间,因为有512的专享内存所以现在这样基本上是充分利用了。
不过我是觉得在性能和效率两方面都还有可以发掘的空间的说……
对了,因为现在的vps上有了两个wordpress并且本博客用了个简单的Hyper Cache插件做缓存,所以出于性能的考虑又调整了一下apache的设置,现在的配置参数如下:
/etc/httpd/conf/extra/httpd-mpm.conf
:
1 2 3 4 5 6 7 |
<IfModule mpm_prefork_module> StartServers 3 MinSpareServers 1 MaxSpareServers 5 MaxClients 150 MaxRequestsPerChild 800 </IfModule> |
/etc/httpd/conf/extra/httpd-default.conf
:
1 2 3 |
KeepAlive On MaxKeepAliveRequests 150 KeepAliveTimeout 120 |
现在可以稳定在这样的水平上了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
top - 16:21:43 up 20 min, 1 user, load average: 0.00, 0.00, 0.00 Tasks: 24 total, 2 running, 22 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1048576k total, 431864k used, 616712k free, 0k buffers Swap: 0k total, 0k used, 0k free, 0k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1486 root 15 0 181m 73m 4524 S 0.3 7.2 0:11.65 python2 1 root 15 0 4036 740 652 S 0.0 0.1 0:00.50 init 1111 root 18 0 11708 1700 1304 S 0.0 0.2 0:00.00 rc.multi 1121 root 25 0 30836 568 328 S 0.0 0.1 0:00.00 syslog-ng 1122 root 15 0 60584 3672 2652 S 0.0 0.4 0:00.00 syslog-ng 1145 root 18 0 6128 704 596 S 0.0 0.1 0:00.00 crond 1157 root 18 0 39080 1256 740 S 0.0 0.1 0:00.00 sshd 1170 ntp 15 0 14152 932 648 S 0.0 0.1 0:00.00 ntpd 1175 root 25 0 27152 1300 960 S 0.0 0.1 0:00.00 vsftpd 1184 root 25 0 11576 1616 1288 S 0.0 0.2 0:00.00 mysqld_safe 1452 mysql 15 0 53824 8180 5856 S 0.0 0.8 0:22.32 mysqld 1468 root 15 0 362m 20m 9516 S 0.0 2.0 0:00.19 httpd 1477 http 16 0 423m 67m 6988 S 0.0 6.6 0:03.69 httpd 1478 http 16 0 431m 76m 7304 S 0.0 7.4 0:03.20 httpd 1479 http 15 0 418m 62m 6408 S 0.0 6.1 0:02.71 httpd 1480 http 16 0 389m 35m 7464 S 0.0 3.4 0:04.44 httpd 1481 root 25 0 33064 1588 340 S 0.0 0.2 0:00.00 nginx 1482 http 15 0 53856 22m 1012 S 0.0 2.2 0:00.04 nginx 1483 root 19 0 11704 1692 1304 S 0.0 0.2 0:00.00 lolilu 1491 root 15 0 60676 3328 2644 R 0.0 0.3 0:00.04 sshd 1493 root 15 0 18364 732 424 S 0.0 0.1 0:00.00 ntpd 1496 root 15 0 17424 2264 1652 S 0.0 0.2 0:00.00 bash 1553 http 16 0 389m 33m 6292 S 0.0 3.3 0:01.47 httpd 1607 root 15 0 10780 1160 952 R 0.0 0.1 0:00.03 top |
vps用ArchLinux,丧心病狂
现在也还在用哦咩哈哈哈哈……<(* ̄▽ ̄*)/
祝挂。、
其实已经挂过好多次了呢哼唧~