Como determinar qual a causa do Apache travar após alguns dias de atividade?

1

Não consigo descobrir por que o Apache parou após alguns dias de atividade.

Aqui está a saída de um top com classificação na memória

top - 14:51:45 up 1 day, 18:02,  3 users,  load average: 6.73, 5.15, 6.27
Tasks: 233 total,   1 running, 226 sleeping,   0 stopped,   6 zombie'
Cpu(s): 34.0%us, 13.8%sy,  0.0%ni,  3.2%id, 48.3%wa,  0.0%hi,  0.8%si,  0.0%st
Mem:   4043688k total,  3943568k used,   100120k free,    46784k buffers
Swap:  1051376k total,   659504k used,   391872k free,   372016k cached


  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
17156 apache    40   0  271m 204m 5800 S  0.0  5.2   0:10.53 httpd
16735 apache    40   0  273m 204m 5504 S  0.0  5.2   0:05.32 httpd
17532 apache    40   0  271m 204m 5188 S 81.1  5.2   0:07.83 httpd
17904 apache    40   0  271m 204m 5396 S  0.0  5.2   0:09.81 httpd
17177 apache    40   0  271m 203m 5248 S  0.0  5.2   0:05.63 httpd
19507 apache    40   0  271m 203m 5272 S  0.0  5.2   0:05.14 httpd
16734 apache    40   0  271m 203m 5380 S  0.0  5.2   0:10.20 httpd
18571 apache    40   0  271m 203m 5240 S  0.0  5.2   0:05.05 httpd
19492 apache    40   0  271m 203m 5212 S  0.0  5.2   0:05.30 httpd
19506 apache    40   0  271m 203m 5188 S  0.0  5.2   0:10.28 httpd
19497 apache    40   0  271m 203m 5172 S  0.0  5.2   0:07.65 httpd
17527 apache    40   0  271m 203m 5240 S  0.0  5.2   0:05.03 httpd
19144 apache    40   0  271m 203m 5220 S  0.0  5.2   0:02.58 httpd
19145 apache    40   0  271m 203m 5152 S  0.0  5.2   0:02.60 httpd
17165 apache    40   0  271m 203m 5104 S  0.0  5.1   0:02.63 httpd
17900 apache    40   0  271m 203m 4576 S  0.0  5.1   0:05.08 httpd
17174 apache    40   0  271m 193m 5300 S  0.0  4.9   0:10.04 httpd
16742 apache    40   0  271m  84m 5468 S  0.0  2.1   0:20.03 httpd
19812 apache    40   0  100m  33m 4812 D  7.6  0.8   0:00.23 httpd
16741 apache    40   0  271m  18m 5700 S  0.0  0.5   0:08.16 httpd
 5095 root      40   0 84448  13m 4388 S  0.0  0.3   0:14.79 httpd
 4511 named     40   0 51340  10m 1128 S  0.0  0.3   2:13.22 named
 4697 mysql     40   0  153m 8964 2560 S  0.0  0.2   4:50.60 mysqld
16727 apache    40   0 73828 7752  444 S  0.0  0.2   0:00.00 httpd
 4245 sso       40   0 28268 3224 1628 S  0.0  0.1   0:00.10 sw-engine-cgi
25520 root      40   0 68164 3052  276 D  0.0  0.1   1:58.79 tar
25473 psaadm    40   0 38364 2564  852 S  0.0  0.1   0:01.69 sw-engine
25512 root      40   0 14112 2432  808 S  0.0  0.1   0:00.78 python
 4912 root      40   0 35160 1648  460 S  0.0  0.0   0:11.67 spamd
28823 root      40   0 12092 1556 1320 S  0.0  0.0   0:00.08 sshd
13713 root      40   0 12092 1444 1324 S  0.0  0.0   0:00.36 sshd
 6829 root      40   0 12092 1440 1320 S  0.0  0.0   0:01.65 sshd
 4240 sso       40   0 27204 1140  760 S  0.0  0.0   0:00.21 sw-engine-cgi
20409 qmailr    40   0  4908 1060  884 S  0.0  0.0   0:00.00 qmail-remote.mo
 7073 root      40   0  5112 1032  816 S  0.0  0.0   0:00.01 bash
20135 qmaild    40   0  4920 1032  864 S  0.0  0.0   0:00.00 qmail-smtpd
19755 qmaild    40   0  4920 1028  856 S  0.0  0.0   0:00.00 qmail-smtpd
13757 root      40   0  4992 1016  804 S  0.0  0.0   0:00.00 bash
29109 root      40   0  2416 1016  724 R  0.0  0.0   0:06.99 top
20133 qmaild    40   0  4920 1000  832 S  0.0  0.0   0:00.00 qmail-smtpd

Eu fiz um strace -p [pid] e descobri que esses processos estão fazendo coisas normais do apache ...

    
por Warner 19.07.2010 / 19:07

4 respostas

0

Status do servidor de configuração especificado no encadeamento existente recomendado. Os tamanhos do processo parecem excessivos. Parece que você pode ter um vazamento de memória.

Eu encontrei o ajuste de MaxRequestsPerChild para 1000 ou 100, pode ajudar quando há vazamentos de memória ou outros problemas no código. Isso geralmente matará os processos antes que eles causem um problema. Isso pode lhe dar tempo para rastrear o problema.

    
por 03.08.2010 / 04:37
2

Um desligamento completo do Apache é algo muito raro de acontecer.

E se você ler os logs de acesso / erro do Apache em torno desses tempos de espera? Algum URL específico é visitado toda vez que isso acontece?

A sua instalação é uma instalação básica do Apache + PHP + MySQL, ou você tem algo mais exótico instalado? como algum cache PHP de código operacional como o xCache instalado?

Que tal o httpd.conf? Você configurou alguns valores de tempo limite muito longos? E você tem o KeepAlive ligado ou desligado?

Um comando apachetop também pode ser muito útil durante a depuração.

EDIT : Às vezes, um redirecionamento defeituoso em qualquer .htaccess ou código PHP pode causar algumas falhas muito drásticas no servidor. Se você tiver um arquivo .htaccess contendo uma linha como

ErrorDocument 404 http://yourserver/notfound.html

e esse arquivo não existe, o Apache vai para um loop de redirecionamento muito rápido, coisas gettings desarrumadas em segundos.

Uma linha ErrorDocument apropriada deve ser como

ErrorDocument 404 /some/path/notfound.html

Além disso, o módulo de reescrita do Apache é muito capaz de travar seu servidor com algumas regras de reescrita defeituosas. Mod_rewrite é vodu. Muito legal, mas ainda vodu, e às vezes um WMD extremamente eficiente.

    
por 01.08.2010 / 15:06
1

Já existe um tópico com informações que podem ajudá-lo.

Recomendamos que você tente primeiro a postagem aceita sobre "status do servidor" e, em seguida, o que eu recomendei: alterar o nível de log.

    
por 19.07.2010 / 19:47
0

Parece que todos estão esperando no Disk I / O.

Você pode se aprofundar um pouco mais usando strace -p <pid>

    
por 19.07.2010 / 19:43