2013-01-22 6 views
0

Une application tordue que j'ai été constamment tué en raison de problèmes de mémoire. Le programme a grandi en taille, consommant toute la mémoire du système avant d'être arrêté par le système d'exploitation. Redémarrez et répétez.Le processus de torsion est énorme

C'est sur un serveur virtuel, donc je la mémoire a doublé, et le problème résolu - le démon se stabilise autour de 1,25 Go de mémoire

Quelqu'un at-il des conseils sur la façon dont je peux mieux le profil de ce à dire ce que/où tout le souvenir est aspiré?

Si l'information sur l'application aide, j'utilise le réacteur tordu et internet.timer.TimerService pour interroger une base de données pour les éléments à mettre à jour à travers trois «services». Les éléments à traiter sont placés dans un fichier twisted.internet.defer.DeferredList et leur traitement se déroule dans un bloc deferToThread. Dans le processus différé, il y a une poignée d'opérations de blocage (récupération de pages Web, etc.) et beaucoup d'analyse HTML (belle soupe et autres bibliothèques). J'ai suggéré que la taille de reactor.threadpool soit de 10 et que chaque 'service' défère pour filer en utilisant un SemaphoreService qui a 10 jetons. Je m'attendais vraiment à ce que ce démon atteigne un maximum de 400 Mo de mémoire, et non 3 fois plus.

Répondre

2

Ceci est plus d'un partage générique de pensées comment je déboguer des problèmes de fuite de mémoire/utilisation dans mes applications tordues. Twisted a un support de serveur ssh, et c'est quelque chose que j'ajoute à presque tous mes projets en développement. Le ssh fournit un accès interpréteur python interactif à la méthode qui a garbage garbage collector python disponible et un certain nombre de fonctions auxiliaires qui me permettent d'a) inspecter le compte des instances d'une même classe, b) commencer et arrêter l'inspection des changements de compter au fil du temps et c) obtenir toutes les références de cette classe. Ce qu'il y a de bien avec l'interpréteur interactif, c'est qu'il permet une introspection ad hoc des instances offensives, leur relation avec d'autres objets et l'état du processus dans lequel ils se trouvent./imprévu les problèmes de publication de référence dans mes projets.

+0

Oh, c'est une bonne idée! Je vous remercie! Je vais certainement essayer cette approche! –

+0

Une question tordue ici ci-dessous, a eu recommandation recomendation pour la découverte de fuite de mémoire. En réalité, cela pourrait être très agréable à utiliser en combinaison avec l'approche ssh que j'ai suggéré plus tôt. Là-bas, vous avez appelé le couteau suisse pour l'exploration interactive de la mémoire :) – jbreicis

Questions connexes