Indicadores de rendimiento del servidor: análisis de carga (carga) y solución de problemas

En el trabajo ordinario, al medir el rendimiento de un servidor, a menudo intervienen varios indicadores, como carga, cpu, mem, qps, rt, etc. Cada indicador tiene su propio significado único. En muchos casos, cuando hay un problema en línea, suele ir acompañado de una anomalía en algunos indicadores. En la mayoría de los casos, algunos indicadores se mostrarán de forma anormal antes de que ocurra el problema.

La comprensión y visualización de estos indicadores, la resolución de excepciones, etc. son habilidades necesarias importantes para los programadores. En este artículo, presentaré principalmente un indicador de carga de la máquina más importante (Carga), que involucra principalmente la definición de carga, la forma de verificar la carga y la idea de resolución de problemas para carga alta.

Que es la carga

Con el rápido desarrollo de Internet y el aumento continuo del volumen de negocios, el tráfico de acceso a datos basado en la red ha crecido rápidamente, especialmente para centros de datos, grandes empresas y sitios web de portales, y el tráfico de acceso incluso ha alcanzado el nivel de 10 Gb / s; al mismo tiempo Con la ayuda de HTTP, FTP, SMTP y otras aplicaciones, el sitio web del servidor proporciona a los visitantes contenido e información cada vez más abundantes, y el servidor se ve abrumado gradualmente por los datos; además, la mayoría de los sitios web (especialmente los sitios web de comercio electrónico) deben proporcionar Servicio las 24 horas, cualquier interrupción del servicio o pérdida de datos clave en la comunicación provocará pérdidas comerciales directas. Todos ellos plantean requisitos de alto rendimiento y alta confiabilidad para los servicios de aplicaciones, y estas enormes cantidades de datos de acceso son cargas.

Ver carga de la máquina

En las máquinas Linux, hay varios comandos para ver la información de carga de la máquina. Que incluyeuptime 、top、w 等。

comando de tiempo de actividad

El comando puede imprimir el tiempo total de funcionamiento del sistema y la carga promedio del sistema. La información que muestra el comando de tiempo de actividad se muestra en orden: la hora actual, cuánto tiempo ha estado funcionando el sistema, cuántos usuarios están conectados actualmente y la carga promedio del sistema en los últimos 1 minuto, 5 minutos y 15 minutos.

➜ ~ tiempo de actividad13: 29 hasta23: 41, 3 usuarios, promedio de carga: 1.741.871.97

La segunda mitad de esta línea de información muestra "carga promedio", que significa "carga promedio del sistema". Hay tres números en ella, a partir de los cuales podemos juzgar si la carga del sistema es grande o pequeña.

1.74 1.87 1.97 Estos tres números significan la carga promedio del sistema en 1 minuto, 5 minutos y 15 minutos. Generalmente lo expresamos como load1, load5, load15.

w命令

La función principal del comando w es en realidad mostrar la información del usuario que está actualmente conectado al sistema. Pero con quién es diferente, el comando w es más poderoso, el comando w también puede mostrar: la hora actual, el inicio del sistema hasta la hora actual, la mayor cantidad de usuarios conectados, el sistema casi 1 minuto, 5 minutos y una carga promedio de 15 minutos . Luego están los datos de cada usuario El orden de visualización de los elementos es el siguiente: cuenta de inicio de sesión, nombre de terminal, nombre de host remoto, tiempo de inicio de sesión, tiempo de inactividad, JCPU, PCPU, línea de comando del proceso en ejecución.

➜ ~ w14: 08 up23: 41, 3usuarios, promedio de carga: 1.741.871.97USER TTY DESDE INICIO DE SESIÓN @ IDLE WHAThollis consola - 六 14 23: 40-hollis s000 - 六 14 20: 24-zshhollis s001 - 六 15 - w

A partir wdel resultado del comando anterior , puede ver que la hora actual del sistema es 14:08, y han pasado 23 horas y 41 minutos desde que se inició el sistema, y ​​un total de 3 usuarios conectados. La carga promedio del sistema en los últimos 1 minuto, 5 minutos y 15 minutos son respectivamente1.74 1.87 1.97。这和uptime得到的结果相同。 下面还打印了一些登录的用户的各项数据,不详细介绍了。

top命令

El comando superior es una herramienta de análisis de rendimiento de uso común en Linux, que puede mostrar el estado de ocupación de recursos de cada proceso en el sistema en tiempo real, similar al administrador de tareas de Windows.

➜ ~ topProcesses: 244total, 3running, 9stuck, 232sleeping, 1484threads14: 16: 01LoadAvg: 1.74,1.87,1.97 CPUusage: 8.0% user, 6.79% sys, 85.19% idle SharedLibs: 116Mresident, 16Mdata, 14Mlinkedit.Mem23Regions, 21Menlaceedit.Mem23Regions 50Mprivate, 930Mshared.PhysMem: 7819Mused (1692M con cable), 370Munused.VM: 682Gvsize, 533Mframeworkvsize, 6402060 (0) swapins, 7234356 (0) swapouts.Networks: paquetes: 38573006/251Minout, 334448 / 60Mread: 350852 / 40Gwritten.PID COMMAND% CPUTIME #TH #WQ #PORTMEM PURG CMPRS PGRP PPID STATE BOOSTS% CPU_ME% CPU_OTHRSUID FAULTS COW MSGSENT MSGRECV SYSBSD SYSMACH CSW30845 top 3.0 00: 00.491 / 1 0 21 * 30845 013B94 corriendo 0.000000.00000 0 3283+ 112 203556+ 101770+ 8212+ 119901+ 823 + 30842 GoogleChrom0.0 00: 47.3917 0155130M 0B 0B 1146 1146 durmiendo * 0 [1] 0.000000.00000 501 173746 2697 117678 37821 364228 444830 310043

En el resultado de salida anterior, Load Avg: 1.74, 1.87, 1.97 muestra la información de carga.

Rango de carga normal de la máquina

La cuestión de qué tan normal es la carga de la máquina siempre ha sido muy controvertida, y diferentes personas tienen diferentes entendimientos. Para una sola CPU, algunas personas piensan que si la carga excede 0.7, está más allá del rango normal. Algunas personas piensan que siempre que no supere 1, está bien. Algunas personas piensan que la carga de una sola CPU es aceptable por debajo de 2.

¿Por qué hay tantos entendimientos diferentes? Es porque diferentes máquinas tienen otros factores además de la influencia de la CPU. Los programas en ejecución, la memoria de la máquina e incluso la temperatura de la sala de máquinas pueden ser diferentes.

Por ejemplo, algunas máquinas se utilizan para ejecutar periódicamente una gran cantidad de tareas por lotes. Durante este período de tiempo, la carga puede aumentar relativamente. Puede ser menor en otras ocasiones. Entonces, ¿necesitamos solucionar problemas durante este período de picos altos?

Mi sugerencia es que es mejor establecer una línea de base de indicadores basados ​​en la situación real de su propia máquina (como el valor promedio en el último mes). Siempre que la carga diaria no sea demasiado grande dentro del rango de la línea de base, se puede aceptar. Se requiere la intervención humana para verificar.

Cómo reducir la carga

La causa de la carga alta puede ser complicada y puede ser un problema de hardware o de software.

Si se trata de un problema de hardware, entonces el rendimiento de la máquina no es bueno, por lo que es muy sencillo resolverlo, simplemente cambie la máquina.

Como mencionamos anteriormente, el uso de la CPU, el uso de la memoria y el consumo de E / S pueden causar una carga alta. Si se trata de un problema de software, puede deberse a que algunos subprocesos en Java han estado ocupados durante mucho tiempo y una gran cantidad de memoria está ocupada continuamente. Se recomienda solucionar problemas de código de los siguientes aspectos:

1. ¿Existe una pérdida de memoria que cause GC frecuente?

2. ¿Existe un punto muerto?

3. ¿Hay un campo grande para leer y escribir?

4. ¿Será causado por operaciones de la base de datos? Compruebe si hay problemas con la declaración SQL.

Aquí hay otra sugerencia: si encuentra que la carga de la máquina en línea está aumentando, puede considerar volcar la memoria de la pila y reiniciarla para resolver temporalmente el problema, y ​​luego considerar retroceder y solucionar problemas.

Aplicación web Java Cargar ideas de resolución de problemas vertiginosas

1. Use el tiempo de actividad para verificar la carga actual y encontrar que la carga se está elevando.

imagen

2. Utilice el comando top para ver el ID del proceso que ocupa una CPU más alta.

imagen

3. Utilice el comando superior para ver qué subproceso tiene una tasa de ocupación más alta

imagen

4. Utilice el comando printf para ver el número hexadecimal de este hilo.


imagen

5. También puede usar jstat () para verificar la situación del GC para ver si hay FGC frecuente, y luego usar jmap para volcar la memoria y ver si hay una pérdida de memoria.

imagen


Supongo que te gusta

Origin blog.51cto.com/15065848/2572285
Recomendado
Clasificación