Existe-t-il un moyen pour un programme Python de déterminer la quantité de mémoire qu'il utilise actuellement? J'ai vu des discussions sur l'utilisation de la mémoire pour un seul objet, mais ce dont j'ai besoin, c'est de l'utilisation totale de la mémoire pour le processus, afin de pouvoir déterminer quand il est nécessaire de commencer à supprimer les données mises en cache.
python
memory-management
rwallace
la source
la source
psutil
est multiplateforme et peut renvoyer les mêmes valeurs que l'ps
outil de ligne de commande: pythonhosted.org/psutil/#psutil.Process.memory_infopsutil
) prend actuellement en charge Linux, Windows, OSX, FreeBSD et Sun Solaris, à la fois des architectures 32 bits et 64 bits, avec des versions Python de 2.6 à 3.4" dans Documentationpsutil
,psutil.Process()
est équivalent àpsutil.Process(os.getpid())
. C'est une chose de moins à retenir pour taper.Pour les systèmes basés sur Unix (Linux, Mac OS X, Solaris), vous pouvez utiliser la
getrusage()
fonction à partir du module de bibliothèque standardresource
. L'objet résultant a l'attributru_maxrss
, qui donne l' utilisation maximale de la mémoire pour le processus appelant:Les documents Python ne prennent pas en compte les unités. Reportez-vous à la
man getrusage.2
page de votre système spécifique pour vérifier la valeur de l'unité. Sur Ubuntu 18.04, l'unité est indiquée en kilo-octets. Sur Mac OS X, ce sont des octets.La
getrusage()
fonction peut également être donnéeresource.RUSAGE_CHILDREN
pour obtenir l'utilisation des processus enfants et (sur certains systèmes)resource.RUSAGE_BOTH
pour l'utilisation totale (auto et enfant) des processus.Si vous ne vous souciez que de Linux, vous pouvez également lire le fichier
/proc/self/status
ou/proc/self/statm
comme décrit dans les autres réponses pour cette question et celle- ci également.la source
Sous Windows, vous pouvez utiliser WMI ( page d'accueil , fromagerie ):
Sous Linux (à partir du livre de recettes python http://code.activestate.com/recipes/286222/ :
la source
return int(result[0].WorkingSet)
Sous Unix, vous pouvez utiliser l'
ps
outil pour le surveiller:où 1347 est un identifiant de processus. De plus, le résultat est en Mo.
la source
Utilisation actuelle de la mémoire du processus actuel sous Linux , pour Python 2 , Python 3 et pypy , sans aucune importation:
Il lit le fichier d'état du processus en cours, prend tout après
VmRSS:
, puis prend tout avant la première nouvelle ligne (isolant la valeur de VmRSS), et coupe enfin les 3 derniers octets qui sont un espace et l'unité (ko).Pour revenir, il supprime tout espace et le renvoie sous forme de nombre.
Testé sur Linux 4.4 et 4.9, mais même une première version de Linux devrait fonctionner: en recherchant
man proc
et en recherchant les informations sur le/proc/$PID/status
fichier, il mentionne des versions minimales pour certains champs (comme Linux 2.6.10 pour "VmPTE"), mais le "VmRSS "champ (que j'utilise ici) n'a pas une telle mention. Par conséquent, je suppose qu'il existe depuis une première version.la source
J'aime ça , merci pour @bayer. Je reçois maintenant un outil de comptage de processus spécifique.
Joignez ma liste de processus.
Référence
la source
ps aux | awk '/python/{sum+=$6}; END {print sum/1024 " MB"}'
Pour Python 3.6 et psutil 5.4.5, il est plus facile d'utiliser la
memory_percent()
fonction répertoriée ici .la source
Encore plus facile à utiliser que
/proc/self/status
:/proc/self/statm
. C'est juste une liste séparée par des espaces de plusieurs statistiques . Je n'ai pas pu dire si les deux fichiers sont toujours présents.Voici un exemple simple:
Cela produit une liste qui ressemble à ceci:
Vous pouvez voir qu'il saute d'environ 300 000 octets après environ 3 allocations de 100 000 octets.
la source
Ci-dessous, mon décorateur de fonction qui permet de suivre la quantité de mémoire consommée par ce processus avant l'appel de fonction, la quantité de mémoire qu'il utilise après l'appel de fonction et la durée d'exécution de la fonction.
Donc, quand vous avez une fonction décorée avec
Vous pourrez voir cette sortie:
la source
la source
Pour les systèmes Unix, la commande
time
(/ usr / bin / time) vous donne ces informations si vous passez -v. VoirMaximum resident set size
ci - dessous, qui est la mémoire réelle (non virtuelle) maximale (crête) utilisée lors de l'exécution du programme :la source
time
au lieu de/usr/bin/time
. Voir: askubuntu.com/questions/434289/…Utiliser sh et os pour entrer dans la réponse de python bayer.
La réponse est en mégaoctets.
la source