Назад | Перейти на главную страницу

apache потребляет много памяти

Я использую большой экземпляр Amazon EC2 (память 7,5 ГБ) для своего 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 часов он снова заполняется. Среднесуточная загрузка ЦП ниже 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    

Один из скриптов, запускаемых Apache, имеет утечку памяти. Вам нужно отследить сценарий. Вы, вероятно, захотите использовать strace.

А пока вы можете запланировать /etc/init.d/httpd graceful работать с интервалом, чтобы освободить память.

Вы можете изучить свои переменные PHP. Существуют различные сценарии настройки, которые вы можете запустить, чтобы получить более глубокое представление о том, как работает Apache. Я лично рекомендую ApacheBuddy (http://quicksnips.dunsmor.com/remote/apachebuddy.pl) strace также является хорошим ресурсом, если вы разбираетесь в чтении вывода, вы можете для начала попробовать следующую команду:

# ps auxw | grep sbin/apache | awk '{print"-p " $2}' | xargs strace