Php Apache httpd使用所有内存直到服务器关闭
我有一台带有8GB RAM的Intel(R)Xeon(R)CPU X3440服务器。Php Apache httpd使用所有内存直到服务器关闭,php,apache,out-of-memory,ram,httpd.conf,Php,Apache,Out Of Memory,Ram,Httpd.conf,我有一台带有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 4
从我看到的情况来看,Apache使用了所有的RAM,使服务器没有响应。
以下是我的Apache配置:
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 1000
MaxClients 1000
MaxRequestsPerChild 4000
</IfModule>
这是我的上衣:
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
那么,解决这个问题的建议是什么呢?我刚才回答了一个类似的问题。以下是我的建议: 我在EC2中的一个实例中遇到了类似的问题,下面是我所做的和建议的:
httpd-l
和sudo httpd-M
如果您可以在这两个命令的结果中看到加载的prefork模块,那么请继续执行下一步。否则,请确保先加载它,否则您将免费更改配置ps aux | grep'httpd'| awk'{print$6/1024;}'| awk'{avg+=($1-avg)/NR;}END{print avg“MB”;}
调用该值x
sudo服务httpd Restart
重新启动apache服务器,并记下您有多少可用内存。我所做的就是从空闲内存中减去一个额外的200MB-500MB
缓冲区,以便以后使用。调用该值y
y
的值除以每个进程使用的内存量x
,即MaxRequestWorkers=y/x
MaxConnectionsPerChild
的值,您可以调整它,直到获得正确的配置。如果您将其设置得太大,那么进程将在被终止之前继续使用越来越多的内存。如果将其设置得太小,那么进程将很快消亡,这将给系统带来开销。我通常把它放在4000
和10000
之间祝你好运 那么,减少子进程的数量…@arkascha如果MaxClient和ServerLimit少于1000,那么访问该站点时会非常慢。最多可打开20秒。如果是这样,那么您的系统很可能根本不足以承受负载。@arkascha它同时大约在200到250之间,您认为我需要更多RAM吗?什么是“同时”呢?这是一份没有任何实质内容的声明。你必须考虑每个请求的服务时间。如果您有更多的请求需要服务,而您的系统无法处理,那么您必须进行一些更改。最好是使实现更加高效,从而缩短响应持续时间。如果这真的不可能,那么您必须获得一个更强大的系统,或者将负载分散到多个系统,这也将导致容错作为一个受欢迎的副作用。
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