Question

J'utilise une application Rails avec Phusion Passenger (mod_rails), qui fonctionnera sans à-coups pendant un certain temps, puis ralentira soudainement jusqu'à une analyse (une ou deux demandes par heure) et ne répondra plus. L'utilisation du processeur est faible pendant toute l'épreuve, bien que je ne sois pas sûr de la mémoire.

Quelqu'un sait-il où je devrais commencer à diagnostiquer / résoudre le problème?

Mise à jour: le fait de redémarrer l'application de temps en temps corrige le problème, bien que je recherche une solution à plus long terme. L’utilisation de la mémoire augmente progressivement (initialement, environ 30 Mo par instance, devient 40 Mo au bout d’une heure et atteint 60 ou 70 Mo au moment où il tombe en panne).

Était-ce utile?

La solution

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

Autres conseils

Si le redémarrage de l'application résout le problème, il serait judicieux de commencer à utiliser ses ressources.

On dirait que vous avez une fuite de mémoire. Si vous souhaitez résoudre le problème, vous pouvez définir une valeur un peu plus basse pour les PassengerMaxRequests jusqu'à ce que vous sachiez ce qui se passe.

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

Cela redémarrera vos instances, individuellement, après avoir traité un nombre défini de demandes. Vous devrez peut-être y toucher pour trouver l'endroit idéal où ils redémarrent automatiquement avant qu'ils ne se verrouillent.

Les autres conseils sont les suivants: -Allez dans vos plugins / gems et assurez-vous qu'ils sont à jour -Vérifiez les actions lourdes et les demandes qui consomment beaucoup de mémoire (NewRelic est idéal pour cela) -Vous voudrez peut-être envisager de passer à REE car il dispose d'un meilleur système de récupération de place

Enfin, vous pouvez définir un travail cron qui examine les instances de passagers en cours d'exécution et les supprime si elles dépassent un certain seuil de mémoire. Le passager se chargera de les redémarrer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top