web-dev-qa-db-fra.com

Comment enregistrer la mémoire et l'utilisation d'un processeur d'une application?

Semblable à la question Comment enregistrer la charge du processeur? , je voudrais enregistrer la mémoire d’un processus.

Le processus que je veux consigner est tué sur un serveur distant et je souhaite connaître la charge du processeur et l'utilisation de la mémoire juste avant sa destruction.

[mise à jour]

Le joli petit script python de Stefano Palazzo et

Les valeurs de sortie d'une ligne de Michał sont inférieures à toppour CPU et Mem. Avez-vous une idée pourquoi?

sortie en haut:

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 
2312 schXX     20   0 1241m 328m  58m S  100  0.3  11:56.68 MATLAB 

affiche le script python de Stefano Palazzo:

python memlogger.py 2312
%CPU    %MEM
76.00   0.20
76.00   0.20
16
Framester

Vous pouvez créer une ligne dans Shell:

logpid() { while sleep 1; do  ps -p $1 -o pcpu= -o pmem= ; done; }

enregistrer le processus avec pid = 123 seulement:

logpid 123

ou pour voir et écrire un journal dans un fichier:

logpid $$ | tee /tmp/pid.log

Si vous souhaitez que d'autres données soient consignées, modifiez les options -o {this}. Voir la section man ps "SPÉCIFICATEURS DE FORMAT STANDARD" pour connaître les paramètres disponibles à utiliser. Si vous souhaitez une résolution temporelle différente, changez sleep {this} dans la fonction logpid().

16
Michał Šrajer

Si vous êtes précisément après les statistiques top, vous pouvez exécuter top en mode de traitement par lots en spécifiant le pid du processus que vous êtes après. En prenant l'exemple de cette page ( http://www.dedoimedo.com/computers/linux-cool-hacks.html ) si vous avez tapé

top -b -d 10 -n 3 >> top-file

Vous auriez "top en cours d'exécution en mode de traitement par lots (-b). Il sera actualisé toutes les 10 secondes, comme indiqué par l'indicateur delay (-d), pour un nombre total de 3 itérations (-n). La sortie sera envoyée. dans un fichier. " Y compris -p vous pouvez spécifier le pid du processus que vous êtes après. Cela retournera bien sûr plus que des ressources purement CPU et RAM, mais il contiendra ces champs. Dans mon cas, par exemple, j'obtiendrais ce qui suit lors de la surveillance du pid 9189 à l'aide de top -b -d 10 -n 3 -p 9189 >> ~/top-file:

PID  USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
9189 pmj27     20   0 1617016 808112  27916 S   0.0  0.3   1:36.63 gedit
3
P-M

Ce simple script python devrait faire ce que vous voulez:

import time
import string
import sys
import commands

def get_cpumem(pid):
    d = [i for i in commands.getoutput("ps aux").split("\n")
        if i.split()[1] == str(pid)]
    return (float(d[0].split()[2]), float(d[0].split()[3])) if d else None

if __== '__main__':
    if not len(sys.argv) == 2 or not all(i in string.digits for i in sys.argv[1]):
        print("usage: %s PID" % sys.argv[0])
        exit(2)
    print("%CPU\t%MEM")
    try:
        while True:
            x,y = get_cpumem(sys.argv[1])
            if not x:
                print("no such process")
                exit(1)
            print("%.2f\t%.2f" % (x,y))
            time.sleep(0.5)
    except KeyboardInterrupt:
        print
        exit(0)

Vous devez d'abord connaître l'ID de processus du programme que vous souhaitez surveiller, puis vous pouvez exécuter le script avec le PID en tant qu'argument:

python log.py 3912

Il imprimera l'utilisation du processeur et de la mémoire vive en pourcentage deux fois par seconde:

%CPU    %MEM
0.90    0.40
1.43    0.40
8.21    0.40
...

Vous pouvez ensuite rediriger sa sortie vers un fichier afin de l'importer ultérieurement dans une feuille de calcul (python log.py 9391 > firefox_log.txt) et importer les données dans une feuille de calcul en sélectionnant Tab comme séparateur.

Le programme se ferme lorsque vous appuyez sur Ctrl + C ou lorsque le processus est tué.

2
Stefano Palazzo