Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Apache httpd使用所有内存直到服务器关闭_Php_Apache_Out Of Memory_Ram_Httpd.conf - Fatal编程技术网

Php Apache httpd使用所有内存直到服务器关闭

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

我有一台带有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>
这是我的上衣:

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中的一个实例中遇到了类似的问题,下面是我所做的和建议的:

  • 如果您使用的是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服务httpd Restart
    重新启动apache服务器,并记下您有多少可用内存。我所做的就是从空闲内存中减去一个额外的
    200MB-500MB
    缓冲区,以便以后使用。调用该值
    y

  • 将可用内存
    y
    的值除以每个进程使用的内存量
    x
    ,即
    MaxRequestWorkers=y/x

  • 至于
    MaxConnectionsPerChild
    的值,您可以调整它,直到获得正确的配置。如果您将其设置得太大,那么进程将在被终止之前继续使用越来越多的内存。如果将其设置得太小,那么进程将很快消亡,这将给系统带来开销。我通常把它放在
    4000
    10000
    之间

  • 这些步骤中的一些步骤是从以下链接中接受的答案中采取的:其中一个解决方案还建议在不需要的情况下禁用某些模块

  • 确保检查访问日志。可能有人试图攻击你的网站

  • 我建议您先执行步骤1-5,看看这是否解决了您的问题


    祝你好运

    那么,减少子进程的数量…@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