httpd использует сотни мегабайт памяти

У меня есть сервер MediaTemple (DV) 4 с 512 МБ под управлением Apache 2.2.21 64-разрядной.

В течение 60 секунд после запуска httpd порождает 2-4 процесса, каждый из которых потребляет ~150 МБ памяти (согласно столбцу top 'RES'). Это очень быстро сбивает мой сервер. Под "сбоями" я подразумеваю, что все URL-адреса начинаются по тайм-ауту, в результате я не могу войти в присоединенную панель плаза. Кроме того, ssh больше не работает (время ожидания соединения), а статистика в реальном времени, предоставляемая MediaTemple, также перестает работать. Пока единственное исправление, которое я нашел, это перезапустить сервер. Apache работает на PHP (Zend Engine 2.3.0) и выполняет простую установку Drupal.

Я попробовал несколько предложений на вики медиа храма без каких-либо улучшений.

  1. Что может быть причиной того, что httpd потребляет столько памяти?
  2. Это нетипичное поведение?
  3. Что я могу сделать, чтобы исправить это и восстановить сервер в работоспособное состояние?

Я рад опубликовать информацию о сервере, журналы и т. Д. По запросу.

РЕДАКТИРОВАТЬ: Я должен был упомянуть ранее, этот сервер работал нормально в течение 4 месяцев или около того, и только начал время от времени сбой, как это в прошлом месяце. Я надеюсь выяснить, связано ли это просто с увеличением загрузки Drupal или с какой-то другой (потенциально более вредоносной) проблемой.

РЕДАКТИРОВАТЬ: В соответствии с просьбой, вот результат работы ps_mem.py сегодня.

-bash-3.2$ wget http://www.pixelbeat.org/scripts/ps_mem.py
-bash-3.2$ sudo python ps_mem.py
 Private  +   Shared  =  RAM used   Program 

 92.0 KiB +  12.0 KiB = 104.0 KiB   qmail-clean
 96.0 KiB +  14.0 KiB = 110.0 KiB   splogger
116.0 KiB +  23.0 KiB = 139.0 KiB   init
128.0 KiB +  12.0 KiB = 140.0 KiB   qmail-rspawn
124.0 KiB +  16.0 KiB = 140.0 KiB   syslogd
132.0 KiB +  12.0 KiB = 144.0 KiB   qmail-lspawn
148.0 KiB +  13.0 KiB = 161.0 KiB   qmail-send
208.0 KiB +  28.5 KiB = 236.5 KiB   dbus-daemon
232.0 KiB +  36.5 KiB = 268.5 KiB   xinetd
240.0 KiB +  32.5 KiB = 272.5 KiB   mysqld_safe
328.0 KiB +  20.5 KiB = 348.5 KiB   udevd
348.0 KiB +  66.0 KiB = 414.0 KiB   courierlogger (4)
444.0 KiB +  85.5 KiB = 529.5 KiB   bash
480.0 KiB +  50.0 KiB = 530.0 KiB   xfs
592.0 KiB +  36.0 KiB = 628.0 KiB   crond
544.0 KiB + 114.0 KiB = 658.0 KiB   couriertcpd (4)
  1.3 MiB +  82.5 KiB =   1.4 MiB   sw-cp-serverd
  1.2 MiB +   1.1 MiB =   2.3 MiB   sshd (3)
  3.1 MiB + 205.5 KiB =   3.3 MiB   named
  3.9 MiB +  48.2 MiB =  52.1 MiB   spamd (2)
 63.7 MiB + 387.0 KiB =  64.1 MiB   mysqld
108.3 MiB +   9.2 MiB = 117.5 MiB   httpd (7)
---------------------------------
                        245.4 MiB
=================================

Верхний снимок, показывающий, что одна служба httpd работает как root, а другие - как пользователь apache. Это (один корневой процесс) типично?

-bash-3.2$ top -b -n 1
top - 17:09:34 up 27 days, 18:04,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  38 total,   1 running,  37 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    946344k total,   581372k used,   364972k free,        0k buffers
Swap:        0k total,        0k used,        0k free,        0k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                     
21727 root      15   0  114m  52m 2112 S  0.0  5.6   0:09.17 spamd                                                                                                                                       
21728 popuser   18   0  114m  50m  972 S  0.0  5.5   0:00.00 spamd                                                                                                                                       
28112 apache    18   0  135m 3612  484 S  0.0  0.4   0:00.03 httpd                                                                                                                                       
28110 root      18   0  259m  15m 8284 S  0.0  1.7   0:00.21 httpd                                                                                                                                       
31854 apache    15   0  259m 9368 1492 S  0.0  1.0   0:00.00 httpd                                                                                                                                       
28113 apache    15   0  260m 9400 1508 S  0.0  1.0   0:00.03 httpd                                                                                                                                       
31853 apache    15   0  260m 9368 1484 S  0.0  1.0   0:00.00 httpd                                                                                                                                       
 5599 named     18   0  301m 5112 1976 S  0.0  0.5   0:00.51 named                                                                                                                                       
31851 apache    15   0  309m  61m 4004 S  0.0  6.7   0:01.13 httpd                                                                                                                                       
28124 apache    18   0  312m  63m 4996 S  0.0  6.8   0:03.92 httpd                                                                                                                                       
 1865 mysql     15   0  358m  70m 7112 S  0.0  7.6   5:52.36 mysqld                                                                                                                                      
 5824 root      18   0  3808  560  472 S  0.0  0.1   0:00.00 courierlogger                                                                                                                               
 5834 root      18   0  3808  556  472 S  0.0  0.1   0:00.00 courierlogger                                                                                                                               
 5842 root      18   0  3808  564  472 S  0.0  0.1   0:00.15 courierlogger                                                                                                                               
 5851 root      18   0  3808  556  472 S  0.0  0.1   0:00.00 courierlogger                                                                                                                               
 7255 qmailq    18   0  3812  428  344 S  0.0  0.0   0:00.00 qmail-clean                                                                                                                                 
 7252 qmaill    18   0  3816  556  468 S  0.0  0.1   0:00.00 splogger                                                                                                                                    
 7253 root      16   0  3856  468  352 S  0.0  0.0   0:00.00 qmail-lspawn                                                                                                                                
 7254 qmailr    15   0  3856  472  356 S  0.0  0.0   0:00.00 qmail-rspawn                                                                                                                                
 7250 qmails    15   0  3864  564  456 S  0.0  0.1   0:00.07 qmail-send                                                                                                                                  
 1418 root      15   0  5928  624  500 S  0.0  0.1   0:10.71 syslogd                                                                                                                                     
    1 root      18   0 10368  736  620 S  0.0  0.1   0:05.61 init                                                                                                                                        
 1695 root      18   0 10784 1300 1060 S  0.0  0.1   0:00.01 mysqld_safe                                                                                                                                 
31869 serverad  15   0 12080 1716 1324 S  0.0  0.2   0:00.02 bash                                                                                                                                        
31976 serverad  15   0 12624 1120  872 R  0.0  0.1   0:00.00 top  
 1123 root      15  -4 12636  684  356 S  0.0  0.1   0:00.00 udevd                                                                                                                                       
 5822 root      17   0 13188  612  476 S  0.0  0.1   0:00.00 couriertcpd                                                                                                                                 
 5832 root      15   0 13188  612  476 S  0.0  0.1   0:00.00 couriertcpd                                                                                                                                 
 5840 root      15   0 13188  612  476 S  0.0  0.1   0:00.46 couriertcpd                                                                                                                                 
 5849 root      18   0 13188  612  476 S  0.0  0.1   0:00.00 couriertcpd                                                                                                                                 
 3077 xfs       15   0 20276 1272  792 S  0.0  0.1   0:00.00 xfs                                                                                                                                         
 2035 root      15   0 20892 1180  588 S  0.0  0.1   0:04.17 crond                                                                                                                                       
 1427 dbus      19   0 21276  700  492 S  0.0  0.1   0:00.00 dbus-daemon                                                                                                                                 
 3523 root      15   0 21664  944  712 S  0.0  0.1   0:00.02 xinetd                                                                                                                                      
28213 sw-cp-se  18   0 59512 2728 1420 S  0.0  0.3   0:00.03 sw-cp-serverd                                                                                                                               
 1504 root      15   0 62680 1228  660 S  0.0  0.1   1:54.58 sshd                                                                                                                                        
31866 root      15   0 96624 3704 2852 S  0.0  0.4   0:00.02 sshd                                                                                                                                        
31868 serverad  15   0 96624 1892 1012 S  0.0  0.2   0:00.04 sshd             

... и некоторые характеристики памяти в соответствии с пс.

-bash-3.2$ ps aux | sort -nk +4 | tail
named     5599  0.0  0.5 308484  5112 ?        Ssl  Jul24   0:00 /usr/sbin/named -u named -c /etc/named.conf -u named -t /var/named/run-root
apache   28113  0.0  0.9 266364  9400 ?        S    05:15   0:00 /usr/sbin/httpd
apache   31853  0.0  0.9 266364  9368 ?        S    16:08   0:00 /usr/sbin/httpd
apache   31854  0.0  0.9 266228  9368 ?        S    16:09   0:00 /usr/sbin/httpd
root     28110  0.0  1.6 266092 16028 ?        Ss   05:15   0:00 /usr/sbin/httpd
popuser  21728  0.0  5.5 117128 52164 ?        S    Jul07   0:00 spamd child
root     21727  0.0  5.6 117128 53304 ?        Ss   Jul07   0:09 /usr/bin/spamd --username=popuser --daemonize --nouser-config --helper-home-dir=/var/qmail --max-children 1 --pidfile=/var/run/spamd/spamd_full.pid --socketpath=/tmp/spamd_full.sock
apache   31851  0.0  6.6 317320 63324 ?        S    16:08   0:01 /usr/sbin/httpd
apache   28124  0.0  6.8 319536 64604 ?        S    05:15   0:03 /usr/sbin/httpd
mysql     1865  0.0  7.6 367604 72376 ?        Sl   Jul04   5:52 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock --port=3306

Некоторые потенциально важные фрагменты из httpd.conf (после настройки параметров prefork).

-bash-3.2$ head httpd.conf -n 128 | tail -60
#
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 20

#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive Off

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 15

##
## Server-Pool Size Regulation (MPM specific)
## 

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
  StartServers 2
  MinSpareServers 3
  MaxSpareServers 5
  ServerLimit 16
  MaxClients 16
  MaxRequestsPerChild 400000
</IfModule>

# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
  StartServers 1
  MaxClients 50
  MinSpareThreads     25
  MaxSpareThreads     75 
  ThreadsPerChild     25
  MaxRequestsPerChild  0
</IfModule>

Спасибо!

3 ответа

каждый потребляет ~150 Мб памяти (согласно столбцу "RES").

Это не хороший способ измерить использование памяти процессами, как объясняется во многих местах.

Это очень быстро вылетает мой сервер

Если в вашей системе недостаточно памяти, значит, вы неправильно ее настроили. Попробуйте правильно измерить использование памяти и сначала ограничьте количество серверов, затем вы можете начать настройку установки.

Что я могу сделать, чтобы это исправить

Вы не получите здесь ответ - слишком много вопросов и информации, которые необходимо собрать. Начните с понимания того, что на самом деле происходит с памятью и производительностью системы, читайте лоты, читайте еще, устанавливайте механизм сбора метрик, для предпочтения настройте тестовую среду, в которой вы можете быстро опробовать различные конфигурации / загрузки, тогда начинай тюнинг.

Там может быть много причин, почему это происходит. Как человек, который работает в хостинг-центре обработки данных, я бы прежде всего сомневался и спрашивал в журналах следующее:

  • В коде сайта drupal может быть утечка памяти - запустите этот скрипт и опубликуйте результаты здесь.
  • Сайт мог быть взломан. Поэтому проверьте разрешения запущенных процессов Apache.

Мы можем сузить после публикации результатов использования памяти.

Это очень типичное поведение, которое можно изменить в конфигурации Apache. У меня была такая же проблема, и вот что мне помогло:

Apache порождает несколько процессов, ожидающих соединения - это быстрее, чем порождается по требованию.

используйте следующие директивы:

 StartServers          3
 MinSpareServers       2
 MaxSpareServers       3

в конфиге apache указать количество порождаемых процессов.

Вот похожая тема о нескольких процессах Apache -> https://stackoverflow.com/questions/501205/how-can-i-prevent-tons-of-apache-processes-spawning-when-i-start-apache-and-proc

Другие вопросы по тегам