JMAP y Jstack para principiantes

JMAP y Jstack para principiantes
JMAP y JSTACK son probablemente las utilidades más valiosas en la caja de herramientas de cualquier desarrollador de Java. Con la funcionalidad de ambas herramientas combinadas, puede depurar problemas y ejecutar diagnósticos para el programa Java que está codificando. Como el par más fundamental de herramientas de depuración, es esencial que sepa cómo trabajar con ellas.

Esto va a ser un tutorial sobre JMAP y Jstack Utilities en Java para principiantes. Para cuando haya terminado con este tutorial, tendrá una mejor idea sobre cómo estas dos herramientas pueden ayudarlo con la solución de problemas y la depuración.

Ejecutando diagnósticos con Jstack

Jstack, en esencia, es una utilidad de línea de comandos utilizada en la solución de problemas. Con Jstack, puede tener los volcados de subprocesos para programas específicos, procesos o archivos principales de Java que se muestran para identificar los problemas. Esto, a su vez, revela más detalles, como el nombre de la clase completa, el nombre del método, el número de línea del elemento y el índice Bytecode. Jstack le permite ver qué acción está tomando cada línea de código cuando ejecuta el programa.

Ejecutar diagnósticos es para qué se usa más comúnmente la utilidad Jstack. Usted aplica el comando jstack a un archivo/ proceso básico específico, e informa cada hilo vinculado con el JVM (hilos de VM internos incluidos), así como los marcos de pila originales. Además de esto, Jstack también puede identificar superposiciones de uso de recursos (muertos muertos) para solucionar problemas del programa. Estas características permiten a los usuarios eliminar la necesidad de confiar en cualquier otra utilidad para realizar un diagnóstico completo para eliminar cualquier error o error en el programa.

Conducir un volcado de pila

Si un programa no responde, o si un proceso está atascado, puede identificar la raíz exacta del problema ejecutando un volcado de pila. Es especialmente útil cuando el Jstack ProcessId también no responde, por lo que puede usar el interruptor -f para su ventaja.

Un volcado de pila típico debe parecerse a los contenidos a continuación:

Recuperar trazas de los vertederos de núcleo

Si no está familiarizado con los vertederos centrales, son vertederos de memoria que mantienen un registro para archivos o programas, documentando su contenido y estado en un momento determinado, generalmente cuando un problema sufre un bloqueo sin precedentes. Los volcados de núcleo son bastante flexibles en términos de los contenidos que pueden contener: y pueden hacerse muy detallados para aplicaciones particulares.

Para extraer las trazas de pila de un volcado de núcleo, escriba el comando a continuación:

$ Jstack $ java_home/bin/java core

Pila mixta

A menudo se encontrará con errores que son demasiado grandes para ser identificados solo con las pilas de Java. Aquí es donde necesitarás levantar los marcos de la pila nativa y verlos con las pilas Java. Los marcos nativos se generan utilizando el lenguaje C/C ++, y estos pueden ser un salvavidas cuando se trata de ejecutar diagnósticos.

Para imprimir las pilas nativas, use el comando -m como se ilustra a continuación:


Identificar fugas con la utilidad JMAP

Como desarrollador de Java prometedor (asumiré que todavía eres un novato, ¿por qué más estarías en un tutorial de JMAP??), ejecutará diagnósticos con mucha más frecuencia de lo que puede darse cuenta de. Los problemas pueden tomar la forma del desorden de la memoria, manifestándose como un montón acumulado continuamente que no desaparece tan fácil, o tal vez como un retraso en la liberación de una lista de matrices.

Para equilibrar estas compensaciones, primero identificará estas fugas antes de trabajar para solucionarlas. La herramienta más poderosa que tiene a su disposición a este respecto es la utilidad de JMAP. La utilidad de JMAP alivia el problema registrando el tamaño y el estado del montón de acumulación.

Así es como usará el comando JMAP al elegir las filtraciones.

-Comando Heap

El comando -Heap revela información sobre el montón en detalle. Por ejemplo, puede adquirir información sobre los algoritmos GC, perfeccionando los detalles sobre cada hilo involucrado en cualquiera de sus procesos. También puede ver los informes de uso del montón, y en algunos detalles finos también. JMAP revelará información sobre la capacidad de calor y actualmente la memoria disponible cuando se le solicite que genere informes de montón.

Histograma de montón

Para visualizar mejor los informes que ha presentado JMAP, se puede crear un histograma. Para este fin, tiene la opción -histo que imprime el histograma para un archivo central del procesador Java. Cuando se aplica a un proceso en ejecución, verá el tamaño de la memoria en bytes, cuántos objetos los ocupan, con sus nombres de clase.

$ Jmap -histo \/java/re/javase/6/último/binarios/solaris -sparc/bin/java core.27421

Antes de terminar:

Necesitamos hablar de Estadísticas de generación permanente. En Java, la generación permanente es una parte del montón que contiene todo lo que esencial de la máquina virtual. Entre otras cosas, contiene detalles sobre el método y los objetos de clase. Estos detalles incluyen el número exacto de clases, el número de bytes en servicio a cada cargador de clase, la dirección del cargador de clases, así como la dirección del cargador de clase principal, y una indicación de si el programa se mantendrá o enviará a la basura. Colección más tarde.

En resumen

Ahora que sabe cómo usar Jstack y JMAP, tiene dos de las herramientas de solución de problemas más importantes a su disposición. Este tutorial ilustra cómo podría identificar las raíces de diferentes problemas en su programa revelando las pilas y los hilos nativos. También discutimos cómo arreglar las fugas de montón con JMAP.

Eso es todo para esta lección. Hasta la proxima vez.