2012-01-03 27 views

Respuesta

111

para filtrar la salida de top por nombre de proceso, puede utilizar pgrep para obtener una lista de PID por el nombre del proceso y luego pasar a la opción de -ptop. Por ejemplo:

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

Nota: la opción -d',' delimita los PID con comas, que es lo que se espera por el 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 top en 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 que cada segundo, quizás un bucle while con un sleep haría?

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

Para cada entrada de marca de tiempo, puede anexar la salida de date. P.ej.

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

Gracias Shawn, cómo registrar la fecha y la hora por cada 1 segundo. De modo que me ayudaría a aislar en qué momento y la cantidad de CPU utilizada por un proceso específico. – BalaB

+0

@bala ver actualizaciones en respuesta. –

+0

Elegante y muy útil. ¡Gracias! –

5

Otra opción es:

top -b -d 1 -p $(pgrep -d',' java) -n 120 > log.txt 
  • La opción -d permite ajustar la frecuencia utilizada por la parte superior para actualizar los datos .
  • La opción -b significa que la interfaz tradicional de la parte superior es no utilizada. 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 debe ejecutar la parte superior.

Después de que puede escribir:

cat log.txt | grep USER_OF_PROCESS 

verá el tiempo de ejecución del proceso y también% de la CPU, la memoria y todo eso.

2
#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 
Cuestiones relacionadas