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

Monit перезапускает apache2, мне исправить конфигурацию monit или конфигурацию сервера?

Monit часто перезапускает apache2, основываясь на тесте totalmem> 200m в моем разделе apache2. Я не уверен, что у меня действительно есть проблема, или мне следует увеличить тест totalmem в моей конфигурации monit.

Эта конфигурация была прекрасна, пока мы не добавили второй сайт wordpress, когда apache2 начал запускать условие monit totalmem> 200m. Прежде чем я начну рассматривать конструкцию второго сайта WordPress, я хотел бы понять, не следует ли мне просто увеличить предел totalmem в тесте monit и двигаться дальше.

Моя статья monit для сервера apache2 была скопирована из руководства по установке monit. Я счел это разумным значением для начала и решил, что определю конкретное значение для моего конкретного сервера, если столкнусь с проблемами памяти apache. Что ж, теперь я затронул проблему, и выяснить, каким должно быть это значение, оказалось сложнее, чем я ожидал. Я не нашел ничего, что подсказывало бы мне, каким должно быть это значение для конкретной конфигурации сервера.

Хост - это VPS, на котором запущен сервер Ubuntu 10.04LTS. Apache2 запускает приложение для опроса (mod_php5), две отдельные установки WordPress (mod_php5) и форк Redmine (mod_passenger). Мы начали настраивать webdav для обмена файлами внутри компании, но фактически не используем его. [ПРИМЕЧАНИЕ: (сейчас) я знаю, что могу сэкономить память, переключившись на REE вместо использования ruby1.8.]

Сервер получает чрезвычайно низкий трафик - ~ 20 просмотров страниц в час для всех приложений, за исключением ботов и случайного хакерского обнюхивания, и в обозримом будущем вряд ли превысит 1000 просмотров страниц в час. Вот подробности:

$ free -m
             total       used       free     shared    buffers     cached
Mem:           496        354        142          0         39        100
-/+ buffers/cache:        214        282
Swap:         1023          6       1017
top - 17:36:27 up 34 days,  2:23,  2 users,  load average: 0.00, 0.00, 0.00
Tasks:  69 total,   1 running,  68 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.2%us,  0.1%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    508272k total,   362944k used,   145328k free,    40448k buffers
Swap:  1048572k total,     6284k used,  1042288k free,   103028k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
15257 www-data  20   0  228m  37m 4472 S    0  7.5   0:01.20 apache2
15258 www-data  20   0  225m  34m 4580 S    0  6.9   0:00.76 apache2
14680 www-data  20   0  224m  33m 4560 S    0  6.7   0:00.79 apache2
19146 www-data  20   0  222m  33m 3900 S    0  6.7   0:00.75 apache2
15255 www-data  20   0  222m  32m 3780 S    2  6.6   0:00.60 apache2
19733 mysql     20   0  160m  31m 6396 S    0  6.4   0:00.34 mysqld
 9379 root      20   0  199m  12m 7368 S    0  2.6   0:43.30 apache2
10289 root      20   0 46500 9680 1516 S    0  1.9   7:23.87 ruby1.8
10292 nobody    20   0 72376 3656 2888 S    0  0.7   0:00.66 PassengerLoggin
19385 root      20   0 81348 3552 2680 S    0  0.7   0:00.04 sshd
19401 hostexsa  20   0 19556 2256 1592 S    0  0.4   0:00.10 bash
10287 root      20   0 97808 2164 1896 S    0  0.4   0:02.19 PassengerHelper
10282 root      20   0 23512 1908 1648 S    0  0.4   0:00.01 PassengerWatchd
25370 root      20   0  105m 1876 1260 S    0  0.4   3:58.88 monit
19400 hostexsa  20   0 81348 1784  912 S    0  0.4   0:00.25 sshd
 3616 root      20   0  245m 1700 1152 S    0  0.3   0:00.21 console-kit-dae
19926 hostexsa  20   0 19248 1220  932 R    0  0.2   0:00.05 top
:/etc/monit/conf.d $ cat apache2.conf
check process apache2 with pidfile /var/run/apache2.pid
    start program = "/etc/init.d/apache2 start" with timeout 20 seconds
    stop program = "/etc/init.d/apache2 stop"

if cpu is greater than 60% for 2 cycles then restart
if cpu > 80% for 5 cycles then restart
if totalmem > 200.0 MB for 5 cycles then restart
if children > 250 then restart
if loadavg(5min) greater than 10 for 8 cycles then stop
if 3 restarts within 5 cycles then timeout

if failed host sub.example.net port 80 protocol http
   and request "/monit/token" then restart

group server
$ /usr/sbin/apache2 -v
Server version: Apache/2.2.14 (Ubuntu)
Server built:   Nov 18 2010 21:19:09

/etc/apache2/mods-enabled$ ls
alias.conf            autoindex.load  env.load          reqtimeout.conf
alias.load            cgi.load        mime.conf         reqtimeout.load
auth_basic.load       dav_fs.conf     mime.load         rewrite.load
authn_file.load       dav_fs.load     negotiation.conf  setenvif.conf
authz_default.load    dav.load        negotiation.load  setenvif.load
authz_groupfile.load  deflate.conf    passenger.conf    status.conf
authz_host.load       deflate.load    passenger.load    status.load
authz_user.load       dir.conf        php5.conf
autoindex.conf        dir.load        php5.load

Из моего apache2.conf:

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 10


    StartServers          1
    MinSpareServers       1
    MaxSpareServers       5
    MaxClients           50
    MaxRequestsPerChild   5000

:/etc/mysql/conf.d$ cat mysqld_small_footprint.cnf
allowed_packet = 1M
thread_stack = 64K
table_cache = 4
sort_buffer = 64K
net_buffer_length = 2K
skip-innodb

ОБНОВИТЬ

Только что нашел следующее руководство в этой статье о базовой настройке сервера Apache Он предлагает именно то руководство, которое я искал. Например:

Для достижения оптимальной производительности вам нужно настроить параметр Apache MaxClients таким образом, чтобы Apache мог использовать не более 70% доступной физической памяти. Чем выше, тем выше риск того, что приставка начнет сильно погружаться в пространство подкачки, что резко увеличит время ожидания ввода-вывода и процессора и может легко привести к падению сервера на колени.

Само по себе использование более 200 МБ ОЗУ не обязательно является проблемой для вашего сервера apache. Но я думаю, что нужно просто разобраться, что приемлемо для ваш настроить.

Если на этом VPS больше ничего нет, я думаю, можно безопасно разрешить apache более 200M в качестве верхнего предела.

Если у вас есть время и ноу-хау, вы, безусловно, можете найти способы снизить это число, но для вас может быть более эффективным просто поднять порог мониторинга и не допускать его повторного запуска. Насколько вам известно, он может стабилизироваться при использовании 201 МБ, верно (маловероятно, но вы понимаете мою точку зрения).

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