Solución de problemas de operación y mantenimiento del sistema: análisis de alta memoria de Java

1. Verifique el uso de la memoria

Utilice arriba para ver el uso de memoria del proceso, mayús+m para ordenar el uso de memoria en orden descendente y mayús+p para ordenar el uso de CPU en orden descendente.
Insertar descripción de la imagen aquí

2. Verificar el estado del hilo de un proceso.

ps p $pid -L -o pcpu,pmem,pid,tid,time,tname,cmd

3. Ejecute el comando jmap $pid para observar el uso de la memoria.

Insertar descripción de la imagen aquí

4. Ejecute el comando jstat -gcutil $pid 5s para verificar el uso de la memoria.

Insertar descripción de la imagen aquí

El significado de las columnas de resultados:
  S0 — Espacio de superviviente en el espacio Heap 0 Porcentaje de área utilizada espacio
  S1 — Espacio de superviviente 1 en el espacio Heap Porcentaje de área utilizada espacio
  E — Espacio Eden en el espacio Heap Porcentaje de área utilizada espacio
  O — Espacio antiguo del montón Porcentaje de espacio utilizado espacio
  P: espacio permanente Porcentaje de espacio utilizado
  YGC: número de veces que ocurre Young GC desde el inicio de la aplicación hasta el muestreo
  YGCT: tiempo invertido por Young GC desde el inicio de la aplicación hasta el muestreo (unidad de segundos)
  FGC: número de ocurrencias de GC completo desde el inicio de la aplicación hasta tiempo de muestreo
  FGCT: el tiempo transcurrido en GC completo desde el inicio de la aplicación hasta el tiempo de muestreo (en segundos)
  GCT: el tiempo total dedicado a la recolección de basura desde el inicio de la aplicación hasta el tiempo de muestreo (en segundos) segundos)
  GCT es la suma de tiempo de YGCT y FGCT .

5. Ejecute el comando jmap –heap $pid para ver la configuración de cada área de memoria.

6. Ejecute el comando jmap -histo:live $pid para ver el número de instancias de cada clase, el uso de memoria y el nombre completo de la clase. Ejecutado una vez cada minuto, 5 veces seguidas

Insertar descripción de la imagen aquí

7. Obtenga el archivo de volcado

jmap -dump:formato en vivo=b,archivo=./dump.bin $pid

8. Ver información de la pila de procesos

jstack -l $pid> /usr/local/temp/jstack.log

Insertar descripción de la imagen aquí

Análisis de impresión del comando JSTACK
 Formato de registro
 "Keep-Alive-Timer" representa el nombre del hilo. En el desarrollo real, es necesario elegir un nombre que esté relacionado con la empresa y que sea familiar para el usuario para facilitar la resolución de problemas.
 "prio=8" indica la prioridad del hilo.
 "os_prio=0" indica prioridad a nivel del sistema operativo.
 "tid=0x000055868e1e9000" representa la identificación del hilo.
 "nid=0x394f" indica la identificación del subproceso asignada por el sistema operativo.
 "0x00007fabd4f44000" representa la dirección inicial de la pila de subprocesos.
Análisis detallado

Esperando bloquear <0x00000000d6349040>, es decir, intentando obtener un bloqueo en el objeto en la dirección 0x00000000d6349040; pero el objeto está bloqueado por el hilo (bloqueado <0x00000000d6349040>).

esperando en condición [0x00007fabd5b4e000]: Indica que está esperando que se active una determinada condición.
esperando entrada del monitor [0x000000001bbcf000]: indica que el hilo está esperando adquirir el bloqueo.

Entre ellos: java.lang.Thread.State: WAITING (estacionamiento): esperando que ocurra la condición;
java.lang.Thread.State: TIMED_WAITING (estacionamiento o durmiendo): sincronización, si la condición no llega, se despertará se levanta regularmente.
MEM.

Nota: jmap y jstack deben ejecutarse utilizando el mismo usuario que el proceso.

Supongo que te gusta

Origin blog.csdn.net/weixin_40012925/article/details/132164430
Recomendado
Clasificación