我使用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%。
这里是按内存使用情况sorting的最高合并率。
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
Apache运行的脚本之一有内存泄漏。 你需要跟踪脚本。 你可能会想使用strace 。
同时,您可以安排/etc/init.d/httpd graceful的间隔运行来释放内存。
你可能想看看你的PHPvariables。 您可以运行各种调优脚本来更深入地了解Apache如何执行。 我个人推荐的是ApacheBuddy( http://quicksnips.dunsmor.com/remote/apachebuddy.pl )如果你精通阅读输出,strace也是一个很好的资源,你可以尝试下面的命令:
# ps auxw | grep sbin/apache | awk '{print"-p " $2}' | xargs strace