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 à top
pour 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
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()
.
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
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é.