apache 消耗大量内存

apache 消耗大量内存

我使用 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

相关内容