diagnóstico de aplicaciones java
Es posible que los siguientes pasos no se apliquen a todas las aplicaciones de Java. Pasos relevantes del diagnóstico de la aplicación Java:
- Recopilación de datos de la aplicación.
- Usar herramientas para el diagnóstico.
- Diagnóstico de la memoria.
- Diagnóstico de rendimiento.
- Diagnóstico de error jvm.
Recopilación de datos de la aplicación.
La recopilación de datos de la aplicación aquí es para recopilar datos relacionados con el rendimiento del sistema y la memoria, no todos los datos de registro de la aplicación. Para los propios datos de la aplicación, imprima el registro de acuerdo con los requisitos de la aplicación, considere usar el marco de registro para facilitar el ajuste del nivel de registro y el diagnóstico de la aplicación. Esto es principalmente para datos relacionados con el rendimiento. ¿Cómo recolectar datos?
- Recopile datos de memoria (archivo principal) cuando el programa se bloquea.
- Recopile datos de volcado de montón cuando la memoria se desborda.
- Recolecte registros de recolección de basura.
- Parámetros relacionados de jvm al inicio de la colección.
- Recopile datos en tiempo real (como datos de volcado de subprocesos).
- Recopile datos de uso de memoria y CPU.
Cómo operar en la aplicación java:
- archivo central
Los archivos principales se pueden generar cuando Java se aplica a bloqueos.
ulimit -c unlimited
Ábralo en el servidor Linux .
- vertedero
Aumente el
-XX:+HeapDumpOnOutOfMemoryError
parámetro cuando se inicie jvm , luego, cuando la aplicación java salga debido a una excepción OOM, se generará un mensaje de volcado de montón.
- gc log
El aumento en los parámetros de inicio de jvm
-verbosegc
imprimirá el registro de gc.
- parámetros jvm
Al diagnosticar anomalías, también es importante verificar los parámetros de inicio de jvm. Por ejemplo: la estrategia gc de jvm y la asignación de memoria se pueden ver a través de los parámetros de inicio. Agregue los parámetros
-XX+PrintCommandLineFlags
utilizados para imprimir el comando de inicio en los parámetros de inicio.
- volcado de hilo
La información de volcado de subprocesos debe recopilarse en tiempo real durante el diagnóstico y compararse con el procesamiento de datos. Puede usar jstack para imprimir la información de volcado de hilo correspondiente.
- Memoria, datos de CPU
Estos datos también se recopilan en tiempo real y se pueden recopilar mediante la herramienta jmc. Puede obtener datos relacionados al monitorear mbean activando jmx. Otro beneficio de habilitar jmx es que se puede monitorear de forma remota.
Diagnosticar la aplicación.
El diagnóstico de la aplicación se puede dividir en varias categorías:
- Diagnóstico ex post
Dichas herramientas se pueden utilizar para diagnosticar la información de falla después de que ocurra la falla. Tales como: análisis de volcado de montón después de oom.
- Diagnóstico en línea
Dichas herramientas están dirigidas cuando ocurre una falla. Tales como: análisis de volcado de subprocesos cuando el programa está bloqueado.
- Monitor
Dichas herramientas se utilizan para supervisar las aplicaciones en ejecución.
- Otros
Cómo diagnosticar aplicaciones que usan jni, usar la
-Xcheck:jni
interfaz de diagnóstico jni e-verbose:jni
imprimir el registro de la interfaz jni. Aquí solo quiero clasificar según el tiempo y el método de procesamiento del diagnóstico, pero las herramientas de diagnóstico utilizadas normalmente son tan fijas.
Introducción de parámetros de diagnóstico y herramientas de diagnóstico de uso común.
-XX:OnError
Agregue este parámetro cuando inicie una aplicación java, y puede ejecutar un script definido por el usuario cuando la aplicación salga. Por ejemplo, java -XX: OnError = "mail [email protected] " app.jar, envíe un correo electrónico al administrador ( [email protected] ) cuando ocurra un error .-XX:+HeapDumpOnOutOfMemoryError
Almacene la información de volcado del montón de la aplicación cuando el oom sea anormal. Este comando ha sido mencionado anteriormente.-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true,disk=true,repository=/tmp,maxage=1h,settings=default
Este comando permite que la aplicación almacene archivos jfr, que se pueden ver con la herramienta jmc.
Uso de herramientas de diagnóstico.
- jmc
- jconsole
- jvisualvm
- jps
- jmap
- jhat
- jstat
- jstack
- jcmd
Problemas diagnosticados
- Desbordamiento de memoria
El problema del desbordamiento de la memoria puede ser más difícil de solucionar. Necesitamos comparar el estado de los datos de la memoria. Puede usar el comando jcmd para comparar la memoria del commit. Si la memoria del commit es cada vez mayor, entonces existe la posibilidad de una pérdida de memoria.
- Rendimiento
problemas de rendimiento de rendimiento de gc debido a gc. El rendimiento del programa correspondiente de gc tiene un gran impacto. El largo tiempo que gc no es un problema, el problema es que la pausa durante gc lleva mucho tiempo. Si un gc independiente lleva demasiado tiempo, debe considerar cambiar la estrategia de gc.
El rendimiento de sincronización
utiliza problemas de rendimiento causados por bloqueos de sincronización.
Problemas de rendimiento de rendimiento IO causados por sockets, lecturas y escrituras de archivos.
la ejecución de código Rendimiento
ejecución de código Ver el rendimiento.
- Problemas de subprocesos Los problemas de subprocesos generalmente se manifiestan en tiempo de ejecución. El hilo tiene principalmente los siguientes dos problemas:
Bucle de hilo
Hilo en vivo