у меня есть MediaTemple (dv) 4 сервер с 512 МБ, работающий под управлением 64-разрядной версии Apache 2.2.21.
В течение 60 секунд после запуска httpd порождает 2-4 процесса, каждый из которых потребляет ~ 150 МБ памяти (согласно столбцу «RES» вверху). Это очень быстро приводит к сбою моего сервера. Под "сбоями" я подразумеваю, что время ожидания всех URL-адресов истекает, в результате я не могу войти в прикрепленную панель plask. Кроме того, ssh больше не работает (время ожидания соединения истекло), и статистика в реальном времени, предоставляемая MediaTemple, также перестает работать. Пока что единственное исправление, которое я нашел, - это перезапустить сервер. Apache работает под управлением PHP (Zend Engine 2.3.0), обслуживающего простую установку Drupal.
Я попробовал несколько предложений по медиа храм вики без улучшения.
Я буду рад опубликовать сведения о сервере, журналы и т. Д. По запросу.
РЕДАКТИРОВАТЬ: я должен был упомянуть ранее, этот сервер работает нормально в течение 4 месяцев или около того, и только в прошлом месяце начал спорадически вылетать, как это. Я надеюсь выяснить, связано ли это просто с увеличением загрузки Drupal или какой-либо другой (потенциально более опасной) проблемой.
РЕДАКТИРОВАТЬ: По запросу, вот результат работы ps_mem.py Cегодня.
-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
... и некоторая статистика памяти согласно ps.
-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>
Спасибо!
каждый из них потребляет ~ 150 МБ памяти (согласно столбцу «RES» вверху).
Это не лучший способ измерить использование памяти процессами, как объясняется во многих местах.
Это очень быстро приводит к сбою моего сервера
Если в вашей системе не хватает памяти, вы неправильно ее настроили. Попробуйте правильно измерить использование памяти и сначала ограничьте количество серверов, а затем вы можете начать настройку установки.
Что я могу сделать, чтобы это исправить
Здесь вы не получите ответа - слишком много вопросов и информации, которые необходимо собрать. Начните с понимания того, что на самом деле происходит с памятью и производительностью системы, считайте много, прочтите еще немного, установите механизм для сбора метрик, предпочтительно настройте тестовую среду, в которой вы можете быстро опробовать различные конфигурации / нагрузки, потом начинаем тюнинг.
Причин, почему это происходит, может быть множество. Как человек, работающий в хостинговом центре обработки данных, я бы в первую очередь сомневался и спрашивал журналы о следующем:
Мы сможем сузить круг вопросов после того, как вы опубликуете результаты использования памяти.
Это очень типичное поведение, которое можно изменить в конфигурации 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