我有一台带有 8GB RAM 的服务器 Intel(R) Xeon(R) CPU X3440。
据我所知,Apache 使用了所有 RAM 并使服务器无响应。
这是我的 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 - 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 服务器并记下您有多少可用内存。我所做的就是减去一个额外的200MB-500MB
缓冲该空闲内存以供稍后使用。调用该值y
除以可用内存的值
y
超过每个进程使用的内存量x
这就是MaxRequestWorkers = y/x
的值至于
MaxConnectionsPerChild
的值然后你可以调整它直到获得正确的配置。如果你把它设置得太大,那么进程在被杀死之前将继续使用越来越多的内存。如果你把它设置得太小,那么进程就会很快终止,这会给你的系统带来开销。我通常将其保留在4000
之间。和10000
.其中一些步骤是从以下链接中接受的答案中采取的:StackExchange: httpd memory usage其中一种解决方案还建议禁用某些不需要的模块。
请务必检查访问日志。可能有人试图攻击您的网站!
我建议您先执行步骤 1-5,看看是否可以解决您的问题!
祝你好运!
关于php - Apache httpd 使用所有内存直到服务器关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40562135/