httpd
(Apache/2.2.29
)的内存使用存在一些问题。
随着时间的流逝,httpd
进程中的内存使用量会逐渐增加,直到最终达到100%。
我上次重新启动的时间httpd
大约是24小时前。来自的输出free -m
是:
[ec2-user@www ~]$ free -m
total used free shared buffers cached
Mem: 1655 1415 239 0 202 424
-/+ buffers/cache: 788 866
Swap: 1023 4 1019
为了证明是肯定的httpd
,我重新启动httpd
并free -m
再次运行:
[ec2-user@www ~]$ sudo service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[ec2-user@www ~]$ free -m
total used free shared buffers cached
Mem: 1655 760 894 0 202 360
-/+ buffers/cache: 197 1457
Swap: 1023 4 1019
因此,重新启动Apache会将可用内存从239 Mb提升到894 Mb,这似乎是一个巨大的飞跃。
我已经经历列表当前启用的Apache模块(有相当多)和禁用/删除mod_wsgi
和mod_perl
(既不都需要这种服务器,它运行的是基于PHP的Web应用程序- Magento的,特别是)。
基于https://servercheck.in/blog/3-small-tweaks-make-apache-fly,我运行ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}'
并获得以下输出:
[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}'
15.1328 MB
118.09 MB
127.449 MB
129.059 MB
117.734 MB
113.824 MB
125.062 MB
123.922 MB
119.855 MB
108.066 MB
136.23 MB
114.031 MB
113.27 MB
110.695 MB
102.113 MB
113.234 MB
186.816 MB
118.602 MB
0.835938 MB
运行其他建议的诊断工具,MaxClients
其ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
返回以下内容:
[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
110.212 MB
该服务器(Amazon AWS m1.small
实例)具有1.7 Gb
RAM。因此,因此:
关于如何最好地调整httpd
设置或如何诊断到底是什么引起的任何其他指示/建议?
nginx
所以也许是时候尝试一下了,但是老实说,我使用Apache已有多年了,从未遇到任何重大问题。Magento确实可以咀嚼记忆。
grep httpd
-process 的低内存使用量(至少对我而言)。为了解决这个问题,我建议从计算中排除该行,例如:ps aux | grep 'httpd' | grep -v grep | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
-/+ buffers/cache
行;但是在这种情况下,变化是可比较的。根据apache的调整方式,它可能仅从准备好处理请求的几个过程开始。经过许多并发请求一段时间后,可能会分叉更多的进程来处理负载。空闲进程的数量也可以调整。因此,如果apache增长以使用过多的内存,则需要进行一些调整。