que - ver uso cpu linux
Filtrar por nombre de proceso y registrar el uso de la CPU (3)
Otra opción es:
top -b -d 1 -p $(pgrep -d'','' java) -n 120 > log.txt
- La opción -d permite establecer la frecuencia utilizada por la parte superior para actualizar los datos.
- La opción -b significa que no se usa la interfaz tradicional de arriba. En cambio, envía todo a la salida estándar y luego puede usar un conducto (|) o una redirección (>).
- La opción -n informa sobre el número de iteraciones que debería ejecutarse.
Después de eso puedes escribir:
cat log.txt | grep USER_OF_PROCESS
Verá el tiempo de ejecución del proceso y también% CPU, memoria y todo eso.
¿Hay una opción para el comando superior de Linux donde puedo filtrar procesos por nombre y escribir el uso de CPU de ese proceso cada 1 segundo en un archivo de registro?
Para filtrar la salida de top
por nombre de proceso, puede usar pgrep
para obtener una lista de PID por nombre de proceso y luego pasarlos a la opción -p
de top
. Por ejemplo:
top -p $(pgrep -d'','' http)
Nota: la opción -d'',''
delimita los PID con comas, que es lo que espera la top -p
. Nota 2: top
devolverá un mensaje de error si no hay procesos en ejecución que coincidan con el nombre que especifique en pgrep
.
Para escribir los resultados de la top
de un archivo, use la opción -n 1
(solo una iteración) y redirija la salida a su archivo de registro.
top -p $(pgrep -d'','' http) -n 1 >> your_log_file
Para hacer eso cada segundo, ¿quizás un ciclo while con un sleep
haría?
while :; do top -p $(pgrep -d'','' http) -n 1 >> your_log_file; sleep 1; done
Para marcar el tiempo de cada entrada, puede agregar el resultado de la date
. P.ej
while :; do top -p $(pgrep -d'','' http) -n 1 >> log.txt; date >> log.txt; sleep 1; done
#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