Apache httpd使用所有内存直到服务器关闭
我有一台带有8GB RAM的服务器Intel(R)Xeon(R)CPU X3440。
从我看到Apache使用所有RAM并使服务器无响应。
Apache httpd使用所有内存直到服务器关闭
这里是我的Apache配置:
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 1000
MaxClients 1000
MaxRequestsPerChild 4000
</IfModule>
这是我的*-m:
total used free shared buffers cached
Mem: 7859 7725 134 0 189 1566
-/+ buffers/cache: 5969 1889
Swap: 4095 61 4034
这是我的TOP:
top - 10:19:57 up 23 min, 1 user, load average: 8.08, 6.50, 3.90
Tasks: 1124 total, 1 running, 1123 sleeping, 0 stopped, 0 zombie
Cpu(s): 9.8%us, 3.2%sy, 0.1%ni, 60.0%id, 26.2%wa, 0.0%hi, 0.6%si, 0.0%st
Mem: 8048096k total, 7924168k used, 123928k free, 207920k buffers
Swap: 4194300k total, 79820k used, 4114480k free, 1460356k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1921 mysql 20 0 1653m 39m 3428 S 62.7 0.5 6:26.24 mysqld
7944 apache 20 0 399m 29m 4236 S 6.6 0.4 0:10.13 httpd
3201 apache 20 0 382m 11m 3880 S 2.3 0.1 0:00.50 httpd
8030 apache 20 0 382m 10m 3872 S 2.0 0.1 0:00.39 httpd
2837 apache 20 0 384m 13m 3916 S 1.3 0.2 0:00.37 httpd
3160 apache 20 0 383m 11m 3908 S 1.3 0.2 0:00.55 httpd
10555 apache 20 0 382m 11m 3884 S 1.3 0.1 0:00.48 httpd
13626 apache 20 0 381m 10m 3828 S 1.3 0.1 0:00.05 httpd
13668 apache 20 0 382m 11m 3760 S 1.3 0.1 0:00.16 httpd
14284 apache 20 0 381m 10m 3712 S 1.3 0.1 0:00.06 httpd
2848 apache 20 0 382m 11m 3876 S 1.0 0.2 0:00.49 httpd
5254 apache 20 0 382m 11m 3852 S 1.0 0.1 0:00.25 httpd
6085 apache 20 0 382m 10m 3768 S 1.0 0.1 0:00.26 httpd
6257 apache 20 0 382m 11m 3876 S 1.0 0.1 0:00.50 httpd
8067 apache 20 0 380m 9.8m 3732 S 1.0 0.1 0:00.18 httpd
14314 apache 20 0 382m 10m 3768 S 1.0 0.1 0:00.09 httpd
14328 apache 20 0 380m 9288 3800 S 1.0 0.1 0:00.16 httpd
那么,什么是建议解决这个问题?
我刚刚回答了一个类似的问题Check this link。下面是我建议:
我有一个类似的问题在EC2实例和这里就是我所做的,并建议:
如果您使用的prefork,确保该模块通过键入加载这两个命令
httpd -l
和sudo httpd -M
如果您可以看到prefork模块加载到这两个命令中任何一个的结果中,然后直到下一步。否则,请确保首先加载它,否则你会改变配置为空。运行此命令来查找平均内存每个httpd进程正在使用
ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg)/NR;} END {print avg " MB";}'
调用看重x
使用
sudo service httpd restart
重新启动Apache服务器,并记录你有多少可用内存有。我所做的是从该空闲内存中减去一个额外的垫子以备后用。称之为价值y
鸿沟的空闲内存
y
值超过存储每个进程x
使用量,这将是的MaxRequestWorkers = y/x
价值至于
MaxConnectionsPerChild
的值,那么你可以调整它,直到你得到正确的配置。它会让它变得太大,然后这个过程会在被杀之前继续使用越来越多的内存。如果你做得太小,那么这个过程将会过快地死去,这会给你的系统带来开销。我通常将它保持在4000
和10000
之间。其中一些步骤已从以下链接中的接受答案中提取:StackExchange: httpd memory usage其中一种解决方案还建议禁用某些模块(如果不需要它们)。
确保检查访问日志。可能有人正试图攻击你的网站!
我建议你先做1-5步,看看是否解决了你的问题!
祝你好运!
那么,减少子进程的数量... – arkascha
@arkascha如果MaxClients和ServerLimit小于1000,访问时该网站会很慢。长达20秒才能打开。 –
如果是这样,那么很可能你的系统对负载来说不够强大。 – arkascha