我使用 Amazon EC2 大型实例(内存 7.5 GB)作为我的 http 服务器。最近我注意到我的 ssh 命令运行缓慢,因此我检查了内存使用情况。
free -t -m
total used free shared buffers cached
Mem: 7455 7373 82 0 1404 39
-/+ buffers/cache: 5929 1526
Swap: 0 0 0
Total: 7455 7373 82
所以有些东西消耗了大量内存。我每天两次重启 httpd 以释放内存,大约 12 小时后它又满了。每日平均 CPU 利用率低于 20%。
以下是按内存使用情况排序的顶级命令。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
31492 apache 20 0 98.6m 4444 460 S 1.0 0.1 0:04.38 sshd
31493 apache 20 0 168m 12m 608 D 1.0 0.2 0:09.09 rsync
3288 apache 20 0 1988m 1.5g 1468 S 0.7 20.0 4:13.87 httpd
16935 apache 20 0 782m 246m 1532 S 0.7 3.3 0:38.71 httpd
31505 apache 20 0 263m 14m 412 S 0.7 0.2 0:01.27 rsync
3 root 20 0 0 0 0 S 0.3 0.0 7:35.26 ksoftirqd/0
217 root 20 0 0 0 0 S 0.3 0.0 10:38.66 kswapd0
3844 apache 20 0 1676m 1.1g 1628 S 0.3 14.8 3:20.79 httpd
4280 apache 20 0 1275m 847m 1376 S 0.3 11.4 2:36.90 httpd
5323 apache 20 0 946m 616m 1304 S 0.3 8.3 1:53.98 httpd
6580 apache 20 0 1038m 504m 1584 S 0.3 6.8 1:30.28 httpd
8394 apache 20 0 974m 402m 1584 S 0.3 5.4 1:10.86 httpd
22210 apache 20 0 647m 191m 1532 S 0.3 2.6 0:26.09 httpd
26899 apache 20 0 717m 139m 1480 S 0.3 1.9 0:14.65 httpd
31622 root 20 0 15060 1176 888 R 0.3 0.0 0:00.12 top
1 root 20 0 19380 296 0 S 0.0 0.0 0:00.46 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0
答案1
Apache 运行的某个脚本存在内存泄漏。您需要跟踪该脚本。您可能需要使用strace
。
同时,您可以安排/etc/init.d/httpd graceful
按一定间隔运行以释放内存。
答案2
您可能需要查看 PHP 变量。您可以运行各种调整脚本来更深入地了解 Apache 的运行情况。我个人推荐的是 ApacheBuddy (http://quicksnips.dunsmor.com/remote/apachebuddy.pl)strace 也是一个很好的资源,如果你擅长阅读输出,你可以尝试以下命令作为起点:
# ps auxw | grep sbin/apache | awk '{print"-p " $2}' | xargs strace