70 votes

Filtrer par nom de processus et consigner l'utilisation du processeur

Existe-t-il une option pour la commande top linux où je peux filtrer les processus par nom et écrire l’utilisation du processeur de ce processus toutes les 1 secondes dans un fichier journal?

115voto

Shawn Chin Points 29756

Pour filtrer la sortie de l' top par le nom du processus, vous pouvez utiliser pgrep pour obtenir une liste des Pid par le nom du processus, puis les passer à l' -p option de top. Par exemple:

top -p $(pgrep -d',' http)

Remarque: l' -d',' option délimite les PIDs avec des virgules, qui est ce qui est prévu par l' top -p.

Pour écrire les résultats de l' top d'un fichier, utilisez l' -n 1 option (une seule itération) et rediriger la sortie de votre fichier de log.

top -p $(pgrep -d',' http) -n 1 >> your_log_file

Faire que chaque seconde, peut-être un while boucle avec un sleep le ferait?

while :; do top -p $(pgrep -d',' http) -n 1 >> your_log_file; sleep 1; done

Pour l'horodatage de chaque entrée, vous pouvez ajouter la sortie d' date. E. g.

while :; do top -p $(pgrep -d',' http) -n 1 >> log.txt; date >> log.txt; sleep 1; done

5voto

Une autre option est la suivante:

top -b -d 1 -p $(pgrep -d',' java) -n 120 > log.txt
  • L'option-d permet de définir la fréquence utilisée par les meilleurs pour actualiser le les données.
  • L'option-b signifie que l'interface traditionnelle de haut est n'est pas utilisé. Au lieu de cela, il envoie le tout à la sortie standard, et vous pouvez ensuite utiliser un pipe (|) ou une redirection (>).
  • L'option-n indique le nombre d'itérations haut doit s'exécuter.

Après cela, vous pouvez taper:

cat log.txt | grep USER_OF_PROCESS

Vous verrez le temps d'exécution du processus et aussi %de CPU, de Mémoire et tout ça.

2voto

user3193783 Points 21
#You can run following script as ./cpurecorder.sh pid filename
#It will generate output file with memory usage and cpu utilisation.
#You can log other variable by searching man for ps.

`enter code here`filepath=/home/rtcsadm              # modify as desired
interval=20                         # reports per minute
timelimit=6000                      # how long to run, in seconds

mydate=`date "+%H:%M:%S"`           # the timestamp
freq=$((60/$interval))              # for sleep function

while [ "$SECONDS" -le "$timelimit" ] ; do
  ps -p$1 -opid -opcpu -opmem -ocomm -c | grep $1 | sed "s/^/$mydate /" >> $filepath/$2.txt
  sleep 3
  mydate=`date "+%H:%M:%S"`
done

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X