2010-07-20 3 views
2

J'ai un long processus qui récupérera 100k lignes de la base de données db genrer une page web et ensuite libérer tous les petits objets (liste, tuples et dicts). Sur les fenêtres, après chaque requête, la mémoire est libérée. Howerver, sur Linux, la mémoire du serveur ne cesse de croître.Mémoire non libérée par l'application python cherrypy sur linux

Les messages suivants décrivent le problème et une solution possible.

http://pushingtheweb.com/2010/06/python-and-tcmalloc/

est-il un autre moyen de contourner ce problème sans avoir à compiler ma propre version de python qui utilise tcmalloc. Cette option va être très difficile à faire, puisque python est contrôlé par l'administrateur système.

+0

Ceci est une « caractéristique » de la glibc, indépendamment de Python. L'allocateur Windows fonctionne différemment, ce qui vous donne un comportement différent. –

Répondre

0

Vous pouvez compiler Python dans votre propre répertoire de travail plutôt que d'essayer de remplacer sysadmin par le système Python.

D'abord, vous devez confirmer que la solution tcmalloc résout votre problème et n'a pas d'impact des performances trop pour votre application

+0

Je suppose que mon utilisation est assez commune et pas unique. Il doit y avoir un moyen de travailler avec l'allocateur python existant afin qu'il puisse libérer la mémoire du système d'exploitation. – Sad

+1

@Sad, Vous devez confirmer que le problème décrit dans le lien est le même que votre problème. Bien que la mémoire ne puisse pas être retournée au système d'exploitation, elle devrait au moins être libérée dans l'interpréteur pour être utilisée pour les demandes suivantes. Si vous voyez la mémoire grandir et grandir, peut-être que votre problème est différent –

+0

J'ai confirmé que c'est le même problème. J'ai utilisé plusieurs options de profilage de mémoire disponibles en python et je ne trouve aucune fuite de mémoire, mais la taille de la mémoire du programme ne cesse de croître. La mémoire peut également être réutilisée dans l'interpréteur et le problème est seulement limité à Linux. Tout cela combiné avec le fait que mon utilisation est identique à la publication originale (allouer un grand nombre d'objets) et puis les relâcher tous me rends assez à l'aise que mon problème est le même que celui décrit dans le post. – Sad

Questions connexes