Muchas veces queremos monitorear la utilización de la CPU de nuestra aplicación, el comportamiento de subprocesos en segundo plano y, lo que es más importante, el consumo de memoria para tareas que manejan cargas de datos (500 MB – 1 GB) o muchos más datos. Tal monitoreo ayuda a encontrar qué operación está causando una gran utilización de la CPU o la memoria y ayuda a encontrar la razón detrás de los problemas de fuga de memoria o errores de falta de memoria. Para que nuestra aplicación java esté lista para el análisis, una forma es habilitar el puerto JMX para la aplicación y monitorear su rendimiento usando herramientas java como JvisualVM, JConsole, que son paquetes con JDK y se pueden usar fácilmente desde máquinas externas que tengan jdk instalado. A continuación se muestra la guía para habilitar JMX manualmente y los pasos para configurar jvisualvm y jconsole. Conectarse a estas herramientas de monitoreo y ver el consumo de CPU, memoria y subprocesos es el primer paso para comenzar a resolver cualquier problema relacionado con el rendimiento en el sistema. Para un análisis más detallado, es posible que necesitemos analizar volcados de memoria en montón utilizando herramientas de análisis de memoria como Eclipse Memory Analyzer o herramientas gratuitas en línea. Se identifica un problema de qué objetos de clase están ocupando demasiado espacio, puede profundizar en el código de su sistema para solucionar el problema. Podría ser un error en el modelo de la base de datos o en el código Java, que depende del tipo de problema y la aplicación.
A continuación se muestran los pasos para habilitar jmx manualmente configurando la variable de entorno
Paso 1: edite my-app-deployment.yaml ejecutando el siguiente comando.
kubectl edit deployment my-app-deployment
En la sección de entornos del contenedor, agregue el siguiente parámetro (cambie NODE_NAME en consecuencia y use cualquier puerto no utilizado: 9991)
– nombre: JAVA_TOOL_OPTIONS
valor: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9991 -Dcom.sun.management.jmxremote.rmi.port=9991 -Dcom.sun.management.jmxremote.authenticate=false -Dcom .sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false -Djava.rmi.server.hostname=<NOMBRE_NODO>
Si desea generar Heap Dump para analizar problemas relacionados con la memoria como «Error de falta de memoria», proporcione el valor de JAVA_TOOL_OPTIONS como se muestra a continuación:
valor: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9991 -Dcom.sun.management.jmxremote.rmi.port=9991 -Dcom.sun.management.jmxremote.authenticate=false -Dcom .sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false -Djava.rmi.server.hostname=<nombre-host> -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/dumps /heapdumpJ.hprof
Y monte el /dumps como el siguiente bloque:
(Si no desea montar, use una carpeta existente del contenedor como la carpeta /tmp en lugar de /dumps)
montajes de volumen:
– nombre: volcados de montón
ruta de montaje: / volcados
volúmenes:
– nombre: volcados de montón
Después de guardar los cambios en la implementación, Kubernetes volverá a implementar automáticamente todos los pods con los nuevos cambios.
Paso 2: edite my-app-svc.yaml ejecutando el siguiente comando
servicio de edición de kubectl my-app-svc
Agregue tipo: NodePort y exponga nodePort, consulte el ejemplo a continuación my-app-svc.yaml
apiVersión: v1
tipo: Servicio
metadatos:
nombre: mi-aplicación-svc
espacio de nombres: <espacio de nombres>
Especificaciones:
tipo: puerto de Node
puertos:
– nombre: puerto principal
puerto: 9992
protocolo: TCP
– puerto: 9991
NodePuerto: 9991
protocolo: TCP
nombre: jconsole-puerto
selector:
aplicación: mi-aplicación
Después de guardar los cambios en la implementación, Kubernetes reiniciará automáticamente el servicio con nuevos cambios.
Paso 3: Ejecute el siguiente comando y verifique que el puerto 9991 esté disponible.
kubectl get service -n <espacio de nombres> | grep mi-aplicación-svc
Una vez que JMX esté habilitado para su aplicación, conéctese a cualquier herramienta de análisis de rendimiento para monitorear la CPU, la memoria y el uso de subprocesos de la aplicación.
Ejecutando JConsole
- Ejecute jconsole.exe
- Debería aparecer la ventana de JConsole.
- Haga clic en Proceso remoto e ingrese el siguiente valor, reemplace el nombre de host a continuación con su nombre de host.
- Haga clic en Conectar. Seleccione la conexión no segura. Luego, jconsole carga la CPU, la memoria, la utilización de subprocesos y todas las métricas relacionadas con el rendimiento: –
Ejecutando JVisualVM
- Ejecute jvisualvm.exe
- Haga clic con el botón derecho en Remoto y seleccione Agregar host remoto.
- Introduzca su nombre de host.
- El host debería aparecer ahora en la sección Remoto.
- Haga clic con el botón derecho en el host recién agregado y seleccione Agregar JMX.
- Ingrese el <nombre de host>:<puerto> para la conexión, reemplazando el nombre de host y el puerto con su servidor real.
- Seleccione No requiere una conexión SSL.
- Haga clic en Aceptar.
- Después de hacer esto, debería aparecer una nueva entrada debajo del host, seleccionarla le dará una descripción general del perfil remoto.
Ya está todo listo para realizar un análisis de rendimiento de su aplicación Java implementada en el clúster de Kubernetes.
Publicación traducida automáticamente
Artículo escrito por harshitaagrawal2 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA