Operación y mantenimiento del sistema análisis alto de memoria java
- 1. Verifique el uso de la memoria
- 2. Verificar el estado del hilo de un proceso.
- 3. Ejecute el comando jmap $pid para observar el uso de la memoria.
- 4. Ejecute el comando jstat -gcutil $pid 5s para verificar el uso de la memoria.
- 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
- 7. Obtenga el archivo de volcado
- 8. Ver información de la pila de procesos
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.
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.
4. Ejecute el comando jstat -gcutil $pid 5s para verificar el uso de la memoria.
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
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
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.