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?
Réponses
Trop de publicités?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
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.
#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