Compartir tecnología

Ideas para solucionar problemas de pérdida de memoria fuera del montón y compartir casos

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Referencias:

①Utilice mtrace para rastrear pérdidas de memoria fuera del montón de JVM

②Un caso de solución de problemas de uso elevado de memoria Java

1. Ideas de investigación

Obtenga la ubicación de la pérdida de memoria (consulte los materiales de referencia ① para obtener comandos detallados)

  1. Utilice jna para habilitar mtrace en el código Java para realizar un seguimiento de la asignación de memoria

  2. Utilice el comando mtrace para analizar archivos de registro y obtener puntos de llamada de pérdida de memoria.

  3. arthas verifica la pila de llamadas del punto de llamada de pérdida de memoria (puede usar la dirección del punto de llamada directamente, no se requiere ningún nombre de función)

Obtenga contenido de pérdida de memoria (consulte los materiales de referencia ② para obtener comandos detallados)

  1. Ejecute el comando pmap por primera vez para obtener el uso de memoria del proceso Java
  2. Después de un período de tiempo, la memoria aumenta. Ejecute el comando pmap nuevamente para obtener el uso de memoria del proceso Java.
  3. Utilice la herramienta de comparación de texto para comparar la salida de los dos comandos pmap antes y después
  4. Transcodificar para ver el contenido de datos de la memoria recién agregada

2. Compartir casos

Al probar un servicio fuera de línea, cuando el QPS es alto, la memoria ocupada por el área nio.directbuffer de la máquina aumentará repentinamente, lo que provocará que se produzca OOM en el contenedor.

Utilizando las ideas de solución de problemas anteriores, finalmente determinamos que nuestro marco RPC generó una gran cantidad de datos en el área del búfer directo. De hecho, cuando el QPS es alto, la cantidad de subprocesos selectores es pequeña y la capacidad de consumo es insuficiente, lo que genera una acumulación de datos de solicitud y respuesta en el área del búfer directo.