Pregunta

estoy ejecutando algunos JMetro pruebas contra un proceso Java para determinar qué tan receptiva es una aplicación web bajo carga (más de 500 usuarios).JMeter proporcionará el tiempo de respuesta para cada solicitud web y escribí un script para hacer ping al Tomcat Manager cada X segundos, lo que me dará el tamaño actual del montón de JVM.

Me gustaría recopilar estadísticas en el servidor del porcentaje de CPU que utiliza Tomcat.Intenté hacerlo en un script de shell usando ps como esto:

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

...ejecutando el comando cada X segundos y agregando los resultados a un archivo de texto.(para cualquiera que se pregunte, pmem = % de uso de memoria y nlwp es el número de hilos)

Sin embargo, descubrí que esto proporciona una definición de "% de utilización de CPU" diferente a la que me gustaría; según las páginas de manual de 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 lleva ejecutándose el proceso (relación tiempo de CPU/tiempo real), expresado como porcentaje.

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

Como quiero tomar una muestra cada X segundos, me gustaría recopilar la utilización de la CPU del proceso solo en el momento actual, similar a lo que top Me daría (utilización de la CPU del proceso desde la última actualización).

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

¿Fue útil?

Solución

Usar top -b (y otros interruptores si desea salidas diferentes).Simplemente se volcará a la salida estándar en lugar de saltar a una ventana de maldiciones.

Otros consejos

La herramienta más útil que he encontrado para monitorear un servidor mientras realizo una prueba como JMeter en él es estadística.No solo le brinda una variedad de estadísticas del servidor, sino que también las genera en csv para importarlas fácilmente a una hoja de cálculo y le permite ampliar la herramienta con módulos escritos en Python.

Carga de usuarios: top -b -n 2 |grep Cpu |tail -n 1 |awk '{print $2}' |sed 's/.[^.]*$//'Carga del sistema: top -b -n 2 |grep Cpu |tail -n 1 |awk '{print $3}' |sed 's/.[^.]*$//'Carga inactiva: top -b -n 1 |grep Cpu |tail -n 1 |awk '{print $5}' |sed 's/.[^.]*$//'

Cada resultado es un decimal redondo.

Fuera de mi cabeza, usaría la vista del sistema de archivos /proc del estado del sistema - Mire hombre 5 proceso para ver el formato de la entrada para /proc/PID/stat, que contiene información sobre el uso total de la CPU, y use /proc/stat para obtener información global del sistema.Para obtener el uso de la "hora actual", probablemente realmente se refiera a "CPU utilizada en los últimos N segundos";tome dos muestras a poca distancia para ver la tasa actual de consumo de CPU.Luego puedes convertir estos valores en algo útil.En realidad, esto probablemente sea más un trabajo de Perl/Ruby/Python que un script de shell puro.

Es posible que pueda obtener los datos aproximados que busca con /proc/PID/status, que proporciona un promedio de suspensión para el proceso.Sin embargo, datos bastante burdos.

También use 1 como recuento de iteraciones, de modo que obtendrá la instantánea actual sin esperar a obtener otra en el tiempo de $delay.

top -b -n 1
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top