Monit está reiniciando o apache2, devo corrigir a configuração do monit ou a configuração do servidor?

3

Monit está reiniciando o apache2 com frequência, com base no total de itens > Teste de 200m na minha sub-rotina apache2. Não tenho certeza se realmente tenho um problema ou se devo aumentar o totalmem teste na minha configuração de monit.

Essa configuração funcionou bem até que adicionamos um segundo site wordpress, quando o apache2 começou a disparar o monit totalmem > Condição de 200m. Antes de começar a considerar a construção particular do segundo site wordpress, eu gostaria de entender se eu não deveria apenas aumentar o limite de totalmem no teste de monit e seguir em frente.

Minha sub-rotina monit para o servidor apache2 foi copiada de um tutorial de instalação de monit. Eu julguei um valor razoável para começar, e imaginei que eu determinaria um valor específico para o meu servidor em particular se eu me deparasse com problemas de memória do apache. Bem, agora eu acertei a questão, e descobrir o que esse valor deveria ser provou ser mais desafiador do que eu esperava. Eu não encontrei nada que me diga como descobrir qual deveria ser esse valor para uma configuração de servidor em particular.

O host é um VPS que executa o servidor Ubuntu 10.04LTS. O Apache2 está executando um aplicativo de pesquisa (mod_php5), duas instalações únicas do wordpress (mod_php5) e um fork do Redmine (mod_passenger). Começamos a configurar o webdav, para compartilhamento de arquivos dentro da empresa, mas não estamos realmente usando. [NOTA: Eu sei (agora) que posso economizar memória mudando para REE em vez de usar ruby1.8.]

O servidor obtém tráfego extremamente baixo - ~ 20 visualizações de páginas por hora, em todos os aplicativos, exceto bots e sniffers de hackers aleatórios, e é improvável que exceda 1.000 exibições de páginas por hora, no futuro previsível. Aqui estão os detalhes:

$ 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

Do meu 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

UPDATE

Acabamos de encontrar a seguinte diretriz neste artigo sobre o ajuste básico do servidor apache Ele oferece exatamente o tipo de orientação que eu estava procurando. Por exemplo:

For optimum performance, you’ll want to tweak Apache’s MaxClients setting such that Apache can consume no more than 70% of your available physical memory. Any higher and you risk the box starting to dip heavily into swap space, which will drastically increase IO and CPU wait and can easily cause the server to fall to its knees.

    
por marfarma 26.04.2011 / 20:04

1 resposta

3

Por si só, usar mais de 200MB de RAM não é necessariamente um problema para o seu servidor apache. Mas acho que você só precisa descobrir o que é aceitável para a sua configuração .

Se não houver mais nada nesse VPS, acredito que seja seguro permitir o apache acima de 200M como limite máximo.

Se você tiver tempo e know-how, certamente poderá encontrar maneiras de reduzir esse número, mas talvez seja mais eficiente aumentar seu limite de monitores e não reiniciá-lo. Por tudo que você sabe, pode estabilizar em 201MB de uso, certo (improvável, mas você vê o meu ponto).

Se eu estivesse no seu lugar, eu não consideraria aceitável ter o apache reiniciado de vez em quando ... a estabilidade é desejável ... mais do que uma quantidade arbitrária de RAM livre disponível no servidor.

    
por 26.04.2011 / 21:06