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

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

  1. 如果您使用 prefork,请确保通过键入这两个命令来加载模块 httpd -lsudo httpd -M 如果您可以看到 prefork 模块已加载到这两个命令中的任何一个的结果中,则继续下一步。否则,请确保先加载它,否则您将徒劳地更改配置。

  2. 运行此命令可查找每个 httpd 进程使用的平均内存 ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'调用该值 x

  3. 使用 sudo service httpd restart 重新启动您的 apache 服务器并记下您有多少可用内存。我所做的就是减去一个额外的 200MB-500MB缓冲该空闲内存以供稍后使用。调用该值 y

  4. 除以可用内存的值y超过每个进程使用的内存量 x这就是 MaxRequestWorkers = y/x 的值

  5. 至于MaxConnectionsPerChild的值然后你可以调整它直到获得正确的配置。如果你把它设置得太大,那么进程在被杀死之前将继续使用越来越多的内存。如果你把它设置得太小,那么进程就会很快终止,这会给你的系统带来开销。我通常将其保留在 4000 之间。和10000 .

  6. 其中一些步骤是从以下链接中接受的答案中采取的:StackExchange: httpd memory usage其中一种解决方案还建议禁用某些不需要的模块。

  7. 请务必检查访问日志。可能有人试图攻击您的网站!

我建议您先执行步骤 1-5,看看是否可以解决您的问题!

祝你好运!

关于php - Apache httpd 使用所有内存直到服务器关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40562135/

相关文章:

php - OffLiberty.com 如何解析链接以获取文件?

django - 如何为设计师的开发环境设置 Django/Apache

Apache 重写和重定向

c++ - std::throw_with_nested() 在内存不足的情况下调用 std::terminate()

c# - 捕获 OutOfMemory 异常 C#

java - 另一个 Java OutOfMemoryError

php - 使用 html 按钮在 mysql 表中设置值

php - 查询未显示任何结果

c - openssl解密找不到和加密前一样的值

php - sql多插入函数参数无效错误