2008-09-08 29 views
7

Estoy ejecutando algunas pruebas JMeter en un proceso de Java para determinar qué tan sensible es la carga de una aplicación web (más de 500 usuarios). JMeter dará el tiempo de respuesta para cada solicitud web, y he escrito una secuencia de comandos para hacer ping al Tomcat Manager cada X segundos, lo que me proporcionará el tamaño actual del montón de JVM.¿Obtener uso de CPU en script de shell?

Me gustaría recopilar estadísticas en el servidor del% de CPU que utiliza Tomcat. Traté de hacerlo de una secuencia de comandos shell usando ps así:

PS_RESULTS=`ps -o pcpu,pmem,nlwp -p $PID` 

... ejecutar el comando cada X segundos y anexar los resultados en un archivo de texto. (Para cualquiera que se pregunte, pmem =% Uso de memoria y nlwp es el número de hilos)

Sin embargo he encontrado que esto da una definición diferente de "% de utilización de la CPU" lo que me gustaría - de acuerdo a las páginas de manual ps, pcpu se define como:

utilización de la CPU del proceso en formato "##. #". Es el tiempo de CPU utilizado dividido por el tiempo que el proceso se ha estado ejecutando (relación cputime/en tiempo real), expresado como un porcentaje.

En otras palabras, pcpu me da la utilización de la CPU% para el proceso de la vida del proceso.

Ya que quiero tomar una muestra cada X segundos, me gustaría ser la recogida de la utilización de la CPU del proceso en el momento actual sólo - similar a lo que me daría top (utilización de la CPU del proceso ya que el última actualización).

¿Cómo puedo recopilar esto desde un script de shell?

Respuesta

13

Utilice top -b (y otros conmutadores si desea salidas diferentes). Simplemente se volcará a stdout en lugar de saltar a una ventana de maldiciones.

2

En la parte superior de mi cabeza, usaría la vista del sistema de archivos/proc del estado del sistema - Mire hombre 5 proc para ver el formato de la entrada para/proc/PID/stat, que contiene total Información de uso de CPU, y use/proc/stat para obtener información global del sistema. Para obtener el uso de "tiempo actual", probablemente se refiera realmente a "CPU utilizada en los últimos N segundos"; tomar dos muestras a una distancia corta para ver la tasa actual de consumo de CPU. Entonces puede convertir estos valores en algo útil. Realmente, sin embargo, esto es más un trabajo de Perl/Ruby/Python que un script de shell puro.

Es posible que pueda obtener la información aproximada que está buscando con/proc/PID/status, lo que le da un promedio de inactividad durante el proceso. Bastante bastos datos sin embargo.

5

La herramienta más útil que he encontrado para supervisar un servidor mientras se realiza una prueba como JMeter es dstat. No solo le proporciona un rango de estadísticas del servidor, lo envía a csv para una fácil importación en una hoja de cálculo y le permite ampliar la herramienta con módulos escritos en Python.

+0

Gracias por la herramienta dstat! –

0

también usan 1 como recuento de iteraciones, por lo que obtendrá la instantánea actual sin esperar a obtener otra en $ tiempo de demora.

top -b -n 1 
4

de carga del usuario: top -b -n 2 |grep Cpu |tail -n 1 |awk '{print $2}' |sed 's/.[^.]*$//' carga Sistema: top -b -n 2 |grep Cpu |tail -n 1 |awk '{print $3}' |sed 's/.[^.]*$//' carga de inactividad: top -b -n 1 |grep Cpu |tail -n 1 |awk '{print $5}' |sed 's/.[^.]*$//'

Cada resultado es un decimal ronda.