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