Je fais des tests de performance sérieux sur l'analyseur de fichiers binaires que j'écris au travail. Après avoir implémenté le multitraitement pour accélérer considérablement l'analyse, je me suis concentré sur la réduction de l'encombrement de la mémoire, qui peut devenir considérable avec des centaines de milliers de fichiers. Hier, j’ai donc installé un profileur de mémoire Python extrêmement peu technique (Exécuter la liste des tâches en tant que commande système, redirigé vers un fichier, le lire et l’analyser) et le mettre au travail pour voir s’il y avait des fuites de mémoire trop lentes temps. Voici les résultats.
La réponse à ma question semble être non, ou du moins pas de manière appréciable. (Il enregistre les résultats dans un fichier étalé tous les quelques milliers, d’où le motif en dents de scie). Mais la première chose que j’ai constatée a été le saut de 900 Mo, qui s’est tous déroulé dans un intervalle d’environ 90 secondes. Cela m'a rappelé un autre événement dans lequel j'ai enregistré mon premier test en volume élevé:
Seulement en sens inverse. Les deux fois, l'utilisation de la mémoire a augmenté de près de 1 Go. Cela ne semble pas avoir de rapport avec mon programme, je ne devrais donc probablement pas trop m'en inquiéter. Mais est-ce que quelqu'un sait ce qui pourrait causer cela?
UPDATE: J'ai de nouveau exécuté la session d'analyse massive en conservant des journaux de liste de tâches réguliers, en surveillant l'utilisation de la RAM et en utilisant RamMap. La liste de tâches n'a rien trouvé d'inhabituel qui pourrait expliquer l'utilisation de la RAM. (Le graphique Excel ne trouve rien) Mais en utilisant RamMap, je pense avoir trouvé le coupable. En regardant des instantanés de l'utilisation de ma mémoire avant et après la discontinuité massive (ce qui est arrivé juste après la fin de mon programme), j'ai constaté que la catégorie "Fichier mappé" utilisait toute la mémoire supplémentaire. Plus précisément, le fichier temporaire créé par mon programme (qui dépassait largement 1 Go) dominait l’utilisation de la mémoire dans cette catégorie; dans l'onglet "Résumé du fichier", il utilisait plus de 1 Go. J'ai modifié mon programme pour enregistrer les résultats dans ce fichier afin d'éviter l'utilisation excessive de mémoire. Il est donc regrettable qu'il le soit toujours. Est-ce parce que je ne fermais pas le fichier entre deux utilisations? L'ouvrir chargera-t-il toujours l'intégralité de la mémoire? (Il a été créé avec le module shelve de Python pour stocker les données mappées.) Cela ne répond probablement toujours pas à la question de savoir ce qui s'est passé dans le tableau Excel, mais c'est un problème que j'ai traité toute la semaine.
la source