Bonjour
Mon programme est une boucle infinie :
Au début, pas de problème, je le lançais, il pouvait tourner des semaines, la consommation mémoire restait stable. je testais la consommation mémoire avec la commande top : le programme consomme environ 10% de la mémoire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 while 1: do_something()
Biensur, j'ai fait plein de développement dans mon do_something(), et maintenant, je vois qu'en général sur une semaine, le programme passe de 10% à 80% de la mémoire.
Donc, j'ai cherché à comprendre ce qu'il se passe.
1 - je me suis plongé dans le module gc. J'ai notamment beaucoup regardé la fonction gc.get_objets(). J'ai constaté le nombre d'objets géré par le garbage collector reste stable : il oscille entre 42000 et 43000.
2 - j'ai ensuite suivi d'un peu plus prêt la consommation mémoire, pour cela je vais lire /proc/pid/stat, champ 24 (d'après le man : rss %ld Resident Set Size: number of pages the process has in real memory.... ). Je constate que cela augmente bien. Cela augmente pas vraiment à moment caractéristique, un peu à tout moment tout au long du programme.
Donc pour l'instant, j'en suis à :
- le rss augmentant, la taille mémoire de mon programme augmente bien.
- le garbage collector gère toujours le même nombre d'objet, donc pas de fuite flagrante.
Est-ce que quelqu'un aurait un conseil de direction ou chercher maintenant ?
Est-ce que les "objets non-mutable" pourrait créer une fuite mémoire ?
Cordialement
Emmanuel
Partager