2009-10-25 3 views
1

Je cours une application de Rails par Phusion Passenger (mod_rails) qui fonctionnera doucement pendant un moment, puis soudainement lent à une analyse (une ou deux demandes par heure) et ne réponds plus . L'utilisation du processeur est faible tout au long de l'épreuve, même si je ne suis pas sûr de la mémoire.Rails app (mod_rails) se bloque toutes les quelques heures

Est-ce que quelqu'un sait où je devrais commencer à diagnostiquer/réparer le problème? Mise à jour: redémarrer l'application de temps en temps résout le problème, même si je suis à la recherche d'une solution à plus long terme. L'utilisation de la mémoire augmente progressivement (initialement ~ 30 Mo par instance, devient 40 Mo après une heure, atteint 60 ou 70 Mo au moment où il se bloque).

Répondre

1

Nouvelle relique peut vous montrer l'utilisation de la mémoire combinée. Engine Yard recommande des outils tels que Rack :: Bug, MemoryLogic ou Oink. Voici un joli article sur quelque chose de similaire que vous pourriez trouver utile.

+0

Merci: l'article m'a vraiment aidé. – igul222

+0

Cool. Je vous en prie! – andHapp

1

Si le redémarrage de l'application résout le problème, il serait bon de commencer par regarder l'utilisation de ses ressources.

0

Cela ressemble à une fuite de mémoire. Si vous souhaitez contourner le problème, vous pouvez essayer de définir les PassengerMaxRequests à quelque chose de plus bas jusqu'à ce que vous compreniez ce qui se passe.

http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerMaxRequests

Cela va redémarrer votre cas, individuellement, après qu'ils ont servi un certain nombre de demandes. Vous devrez peut-être jouer avec pour trouver l'endroit où ils redémarrent automatiquement avant qu'ils ne se verrouillent.

Autres conseils sont: à travers vos plugins -Aller/pierres précieuses et assurez-vous qu'ils sont à jour -Check pour les actions lourdes et demandes pour lesquelles il y a beaucoup de la consommation de mémoire (NewRelic est grand pour cela) -Vous Vous voudrez peut-être envisager de passer à REE car il a mieux garbage collection

Enfin, vous pouvez définir un travail cron qui regarde vos instances de passagers en cours d'exécution et les tue s'ils dépassent un certain seuil de mémoire. Passager va gérer leur redémarrage.

Questions connexes