O servidor Apache congela completamente até ser reiniciado

3

Meuservidorfazissoacadapoucosdias.Oqueéumaporcariaéquesempreparecefazerissologodepoisdeeuirparaacama,entãoquandoeuacordo,sousaudadacomofatodequemeuservidorestáinativohá6ou7horas.

Quandopercebiissopelaprimeiravez,adicioneiumcronjobquetentareiniciaroservidoracada15minutos,masachoqueissonãoresolveuoproblema.Umavezqueeunoteiqueoservidorestavainoperante,eupossoestecomando:

/etc/init.d/apache2restart*Restartingwebserverapache2apache2:Couldnotreliablydeterminetheserver'sfullyqualifieddomainname,using127.0.0.1forServerName...waiting...........................................................apache2:Couldnotreliablydeterminetheserver'sfullyqualifieddomainname,using127.0.0.1forServerNamehttpd(pid17597)alreadyrunning

...oqueéestranho,porqueumareinicializaçãodevereiniciaroservidor,mesmoqueelejáestejaemexecução,correto?Eueventualmentetiveque"parar" e depois "começar" para que funcionasse novamente.

Eu olhei através dos logs e encontrei algo muito estranho. Parece que, na época em que o servidor falhou, os logs tinham entradas que estão desordenadamente desordenadas. Parece um pouco assim:

xx.xxx.xxx.x - - [21/Apr/2010:06:32:05 -0400] "GET / blah"
xx.xxx.xxx.x - - [21/Apr/2010:06:51:25 -0400] "GET / blah"
x.xx.xxx.xxx - - [21/Apr/2010:06:38:23 -0400] "GET / blah"
xxx.xx.xx.xx - - [21/Apr/2010:06:31:56 -0400] "GET / blah"
xxx.xx.xx.xx - - [21/Apr/2010:06:51:49 -0400] "GET / blah"
xx.xx.xxx.xx - - [21/Apr/2010:06:33:20 -0400] "GET / blah"

Eu não acho que o problema seja a memória, porque isso:

medizque,logoantesdoacidente,ousodamemóriaébom.

Estouexecutandooapachecomoworkermpm,aquiestãoasconfiguraçõesparaisso:

<IfModulempm_worker_module>StartServers1MaxClients100MinSpareThreads5MaxSpareThreads10ThreadsPerChild10MaxRequestsPerChild3000</IfModule>

Esteservidorapacheestáexecutandoummontedecoisas,masamaiorpartedotráfegovemdeumprojetododjangoqueestouhospedando,queusaomod_wsgi.Hátambémumfórumdemáquinassimplesqueestásendoexecutadoemmod_fcgid.Essasconfiguraçõesestãoabaixo:

<IfModulemod_fcgid.c>MaxRequestsPerProcess500MaxProcessCount3AddHandlerfcgid-script.php.fcgiAddHandlercgi-script.cgi.plFCGIWrapper"/usr/bin/php-cgi" .php 
</IfModule>

Alguém sabe de mais alguma coisa que eu possa verificar? Eu apenas mexi em cada cenário que eu consigo pensar, mas esses congelamentos ainda acontecem.

Edit: Eu tenho um servidor postgres e mysql rodando nesta máquina, mas ambos funcionam durante esse congelamento, porque meu script de backup rodou durante esse período de tempo de 5 horas, e funcionou perfeitamente bem.

Edit2: Estou executando o Ubuntu Server 9.10. Quando o servidor está inoperante, todos os pedidos nunca retornam. A página trava. Nenhuma mensagem de erro ou qualquer coisa.

    
por nbv4 21.04.2010 / 19:03

5 respostas

3

Você não diz nada sobre como está usando o mod_wsgi e o configurou. Sugiro começar a ler o link '. Você possivelmente está usando um módulo de extensão C para Python, que não implementa a segmentação completa corretamente. Se você usa o modo daemon de mod_wsgi, tais deadlocks devem ser detectados e os processos, pelo menos, forçosamente reiniciados após um período. Portanto, se você estiver usando o modo incorporado, o que é desencorajado, use o modo daemon como um começo.

No geral, esse tipo de problema, se você acredita que está relacionado ao mod_wsgi, deve ser discutido na lista de discussão mod_wsgi. Depurar coisas como esta no StackOverflow / ServerFault / SuperUser é realmente difícil.

    
por 22.04.2010 / 03:55
1

Bem, parece que alguma coisa está fazendo com que seu servidor da Web obtenha uma quantidade significativa de solicitações - Se você procurar no seu log do erro do apache, provavelmente veja que você está atingindo seu MaxClients limit (é por isso que seu site cai).

Encontre e elimine a fonte da tempestade de pedidos e o seu problema desaparecerá (se tiver sorte, é tudo de uma única fonte e você pode bloqueá-los no seu firewall).

Alternativamente, você pode colocar MaxClients em algum valor insano, mas isso provavelmente irá perturbar o resto do seu sistema.

    
por 21.04.2010 / 19:21
0

Eu acho que é um dos módulos, ou pode haver alguma interação entre os módulos. Meu primeiro suspeito seria mod_wsgi , especialmente porque você está usando o MPM. Ele deve ser seguro, de acordo com os desenvolvedores, mas ainda cria um interpretador python por processo, e o interpretador python não é exatamente compatível com threads. Tente trocar seu aplicativo django para fastcgi. Ou tente executar o apache com o MPM prefork.

Você pode tentar mudar de mod_fcgid para mod_fastcgi e / ou tentar desativar outros módulos que você tenha ativado.

    
por 21.04.2010 / 21:06
0

Você pode postar o que você tem em error_log (pode ser encontrado em / var / log / httpd / error_log) quando o problema acontece?
Além disso, gostaria de ver partes de / var / log / messages ao mesmo tempo.
E, poste a saída de df -h (uso do disco).

    
por 21.04.2010 / 21:24
0

Seu problema pode ser qualquer coisa, mas como está claro que você ainda não é a primeira coisa que precisa fazer é instalar o Monit ou algum software similar. O Monit é um daemon que é executado em seu servidor e, desde que o SO esteja em execução, faz verificações regulares de que os aplicativos que você define estão em execução. Você pode dizer para verificar se o Apache está disponível e se não é reiniciar o Apache. Você também pode avisá-lo para reiniciar o apache, dependendo das variáveis do sistema, como carga alta ou memória RAM completa. Uma vez que você tenha configurado, você pode pelo menos saber que seu site não vai cair quando isso acontecer, e a Monit enviará um e-mail para você quando entrar em ação, assim você terá um registro fácil de quando o problema ocorrer para comparar com os logs. etc

link

    
por 04.02.2011 / 01:36

Tags