Por que meu aplicativo Rails sob o Passenger está parando?

2

Eu tenho um aplicativo do Rails 2.3.2 rodando no Apache com o Passenger, e recentemente, a coisa mais estranha começou a acontecer.

De vez em quando, o aplicativo simplesmente interrompe o processamento de solicitações totalmente e todas elas são atualizadas até o tempo limite. Reiniciar o Apache parece ser a única saída. O sistema está sob carga relativamente leve até que isso aconteça, quando não há carga alguma.

Eu percebo que isso não é muito para continuar, mas como eu posso descobrir o que está causando isso? De nota, o enfileiramento global está ativado; Ruby é ruby-enterprise-1.8.6-20080610; e Passenger é a versão que veio com o já mencionado Ruby Enterprise Edition.

    
por Jim Puls 16.06.2009 / 21:37

5 respostas

4

Um recurso que eu achei útil foi a seção do guia de usuários do Passenger onde eles falam sobre isso:

If one of your application instances is frozen (stopped responding), then you can figure out where it is frozen by killing it with SIGABRT. This will cause the application to raise an exception, with a backtrace.

    
por 16.06.2009 / 22:48
0

Poderia ser algo no código? Algo esperando na entrada bloqueando o thread e fazendo com que vários processos apenas esperem?

    
por 18.06.2009 / 16:13
0

Como você não sabe o que está causando o problema, suponho que você tenha certeza de que está registrando tudo, pelo menos. As últimas poucas entradas de log antes de uma falha podem revelar seu culpado.

O problema poderia ser algo no código. Bem, para descobrir, você poderia implantar um aplicativo rails muito simples, de modo que o código não seria um problema, mas com a mesma configuração exata (apache + passenger + REE), e enviar solicitações com um pequeno script Ruby durante a noite. Execute-o no seu computador pessoal e veja se ele trava. É claro que você precisa ter certeza de que configurou seu ambiente exatamente da mesma maneira.

Também é possível que você esteja ficando sem memória, embora isso dependa das especificidades do seu aplicativo e sistema. Este post vem à mente. Você pode querer tentar modificar as configurações de gerenciamento de memória do REE, conforme descrito no post, para ver se ele resolve o problema (não vai doer tentar em qualquer caso).

Sugiro postar esta pergunta no stackoverflo também, se você ainda não o fez.

    
por 23.06.2009 / 00:41
0

Eu tive a mesma coisa, eu estava hospedando vários aplicativos 1.2.3 usando apache + fastcgi por um ano sem um único travamento, então eu mudei para um novo servidor com apache + passageiro e eles falharam aleatoriamente. O Apache simplesmente pára de responder.

Eu tenho usado o monit para salvá-lo até agora, e minha resposta até agora foi migrar para um novo servidor (virtual) com nginx em vez de apache, e com o último passageiro e rubyee. Até aí tudo bem!

O servidor apache ainda está travando e está servindo apenas um site mestiço agora, então eu diria que é algum problema com o apache ou com minha configuração específica. Dê uma chance ao nginx se puder:)

    
por 23.06.2009 / 13:28
0

Outra possível resposta: o RMagick é conhecido por causar problemas com o Passenger e a desova inteligente.

Este tópico da lista de discussão do Passenger tem mais informações:

It looked like the issue may have been fixed in REE 20090113, but I think it is just happening more infrequently. I found a frozen process this morning running passenger 2.0.6 and REE 20090113 on Centos 4 64- bit.

    
por 29.06.2009 / 20:14