作者:手机用户2502869561 | 来源:互联网 | 2014-05-28 10:53
本文介绍如何根据服务内存或VPS内存来优化Apachehttpd进程,合理优化内存占用01用ROOT账户通过SSH登陆服务器或VPS02运行top03按shift+m.04注意RESmemory占用内存最高的的httpd进程05按Q退出top06停止httpd服务:servicehttpdstop07httpd停
本文介绍如何根据服务内存或VPS内存来优化Apache httpd进程,合理优化内存占用
01用ROOT账户通过SSH登陆服务器或VPS
02运行top
03按 shift + m.
04注意RES memory占用内存最高的的httpd进程
05按 Q 退出 top
06停止httpd服务:service httpd stop
07httpd停止后,执行: free -m
08注意"used"列使用的内存,就是系统占用的内存。
09确定你的服务器或VPS的实际内存
10从实际内存减去系统内存,就是可用内存
11可用内存乘以0.8,作为Apache的平均可用内存(预留20%作为峰值内存)
12用第11步中的平均可用内存除以第4步中的httpd占用的最高RES memory,作为系统的MaxClients值
13打开 httpd.conf文件
14MaxClients:设置MaxClients为第12步中的值
15Keepalive:如果不需要,设置Keepalive为Off(设置为on可以让服务器处理更多的请求,但是会占用更多内存。如果你没有在第11步中预留20%的峰值内存就不要打开)
16keepalivetimeout:如果你设置keepalive为on,
尽量将keepalivetimeout设置的越低越好,如果你的服务器延迟很高,将keepalivetimeout
设置为2-5秒
17Timeout:将Timeout设置为一个合理的值,原则是不会使客户端请求因为超时而中断连接,又不会使已完成的连接保留太长时间。(如果客户端用宽带上网可设为10-30秒,如果是拨号上网可设为30-120秒)
18MaxKeepAliveRequests:将MaxKeepAliveRequests设置为网页页面中最大的请求数(如图片,css,js文件等)。如果你不知道,可以设置为70-200
19MinSpareServers:将MinSpareServers设置为第14步中MaxClients值的10-25%
20MaxSpareServers:将MaxSpareServers设置为第14步中MaxClients值的25-50%
21StartServers:将StartServers设置为MinSpareServers值或MaxSpareServers值。此值是Apache在服务器启动时开启的进程。流量高的站点应该讲此值设置为MaxSpareServers值,流量低的站点应该讲此值设置为MinSpareServrs值
22MaxRequestsPerChild:将MaxRequestsPerChild设置为500
(如果你发现apache子进程占用的内存快速增长) 到 10000
(如果没有发现有内存泄露)。如果设置为0,那么子进程永远也不会被清除,那么apache占用的所有内存也就不会被回收。
23设置完成后,保存httpd.conf文件,重启apache服务: service httpd restart.
下面是配置实例: 在TOP下看到占用内存最多的apache进程占用了 5mb 内存:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
15535 root 16 0 15072 5376 3196 S 0 0.5 0:17.60 httpd
-bash-3.00# service httpd stop
/etc/init.d/httpd stop: httpd stopped
-bash-3.00# free -m
total used free shared buffers cached
Mem: 1024 131 892 0 0 0
-/+ buffers/cache: 131 892
Swap: 0 0 0
-bash-3.00#
可以看到系统占用了131MB内存。服务器总共有384MB内存可用.
384 - 131 = 253MB 可用内存
253 * 0.8 = 202.4MB Apache内存池
200 / 5 = 40
根据上面的信息,开始设置httpd.conf:
Timeout 10 (如果超过10秒还没打开网页,一定是别的地方出了问题)
MaxClients 40 (注意: 如果有其它进程需要更多内存可以将此值设置的更低)
MinSpareServers 4 (我的站点几乎没有流量)
MaxSpareServers 20 (我的服务器几乎不使用内存,所以apache子进程空闲较多也不会有影响)
StartServers 4 (同样是因为站点流量低,所以在apache启动后不需要开启太多进程)
Keepalive On (因为使用的内存不多,所以尽情开放。)
MaxKeepAliveRequests 100 (虽然我的页面没有100多个对象要传输, 但是设置的过低也不会提示性能,所以我设置为100)
KeepAliveTimeout 1 (我没有很大的文件/页面,我不希望为每个连接保持1秒以上的时间)
MaxRequestsPerChild 10000 (设置为此值可以让我的站点性能更好,因为我的站点没有可能导致内存泄露的PHP程序)