[PYTHON] Calculer le taux de partage de mémoire des processus Linux

Un programme qui calcule le taux de partage de mémoire par copie lors de l'écriture des processus Linux.

Avec cette entrée

Vu dans l'entrée ci-dessus

Un programme Perl qui utilise le module Linux :: Smaps introduit en référence à J'ai écrit en Python. Je pense qu'il est facile à utiliser car il fonctionne sans installer de module externe. Nous avons confirmé qu'il fonctionne avec les séries Python 2.6 et supérieures.

#!/usr/bin/env python
  
import sys

def read_smaps(pidlist):
    try:
        print("PID\tRSS\tSHARED\t\tNONE_SHARED")
        mem = lambda t, f: int(f[1]) if f[0] == '%s:' % t else 0.0
        for pid in pidlist:
            filename = "/proc/%s/smaps" % pid
            with open(filename) as f:
                rss = 0.0
                shared = 0.0
                for line in f:
                    fields = line.split()
                    rss += mem('Rss', fields)
                    shared += mem('Shared_Clean', fields)
                    shared += mem('Shared_Dirty', fields)
                print("%s\t%d\t%d (%.2f%%)\t%d" %
                      (pid, rss, shared, shared/rss*100, rss - shared))
                      
    except IOError as e:
        print(e)
  
if __name__ == '__main__':
    if len(sys.argv) < 2:
        print("usage: %s [pids]" % __file__)
        sys.exit(-1)
          
    read_smaps(sys.argv[1:])

$ sudo ./read_smaps.py
usage: ./read_smap.py [pids]

##Spécifiez la liste des PID avec la commande pgrep et utilisez la mémoire du programme.(Taux de partage)Calculer
$ sudo ./read_smaps.py `pgrep train_model.py`
PID     RSS     SHARED          NONE_SHARED
23241   330396  202516 (61.29%) 127880
23246   414720  202476 (48.82%) 212244
23247   414836  202480 (48.81%) 212356
23248   414196  202440 (48.88%) 211756

RSS représente l'utilisation de la mémoire du processus, SHARED représente l'utilisation de la mémoire partagée (taux de partage) et NONE_SHARED représente l'utilisation de la mémoire non partagée. L'exemple ci-dessus est un multi-processus écrit en Python (en utilisant scikit-learn) qui examine le taux de partage de mémoire d'un programme qui effectue un apprentissage par régression et une validation croisée, mais on peut dire qu'il partage environ 50% de la mémoire. Vous pouvez le lire.

C'est un programme simple qui lit simplement le contenu du fichier / proc / {PID} / smaps, il semble donc que de nombreuses personnes écrivent en AWK sur le Web. J'écris souvent mon travail, la science des données et la technologie élémentaire en Python, alors je l'ai écrit en Python, auquel je suis habitué. Récemment, j'ai étudié secrètement le langage Go et j'ai écrit du code abandonné en Go même au travail.

Recommended Posts

Calculer le taux de partage de mémoire des processus Linux
Calculez le nombre de changements
Vérifiez l'état de la mémoire du serveur avec la commande gratuite Linux
Vérifiez la protection de la mémoire de Linux Kerne avec le code pour ARM
[Comprendre en 3 minutes] Le début de Linux
100 traitement du langage knock-93 (en utilisant des pandas): calcul du taux de précision de la tâche d'analogie
[Java] [Linux] Etude de la manière dont l'implémentation des processus enfants Java sous Linux est réalisée
[python] Vérifier la consommation de mémoire des variables
Comprendre la partie "temporaire" d'UNIX / Linux
[Linux] Découvrez les bases des commandes shell
L'origine de Manjaro Linux est "Mount Kirimandjaro"
Calculez le nombre total de combinaisons avec python
[2020July] Vérifiez l'UDID de l'iPad sous Linux
Calculer la probabilité de valeurs aberrantes sur les moustaches de la boîte
Linux (mémoire de commande)
Voir ici pour la quantité de mémoire libre de la commande free
Calculer le volume à partir de la structure bidimensionnelle d'un composé
L'histoire de la création de l'environnement Linux le plus rapide au monde
Ouvrez la version Chrome de LINE à partir de la ligne de commande [Linux]
[Python] Calculez la valeur moyenne de la valeur de pixel RVB de l'objet
L'histoire du partage de l'environnement pyenv avec plusieurs utilisateurs
[Langage C] [Linux] Récupère la valeur de la variable d'environnement
Calculer le coefficient de régression d'une analyse de régression simple avec python
Étapes pour calculer la probabilité d'une distribution normale
Estimer grossièrement l'utilisation totale de la mémoire d'un objet
Vérifiez le type et la version de la distribution Linux
Calculer le produit des matrices avec une expression de caractère?
Comprendre les attributs des fichiers Linux (commande ls -l)
Annonce de la disponibilité de Java 11 LTS sur Amazon Linux 2