Uso del perfilador HPROF
HPROF es un perfilador de demostración que se suministra con el SDK de IBM® que utiliza JVMTI para recopilar y registrar información sobre la ejecución de Java™ . Puede utilizar HPROF para saber qué partes de un programa están utilizando la mayoría del tiempo de procesador o memoria.
java -Xrunhprof[:<option>=<value>,...] <classname>Cuando ejecuta Java con HPROF, se crea un archivo cuando finaliza el programa. Este archivo se coloca en el directorio de trabajo actual y se denomina java.hprof.txt (java.hprof si se utiliza formato binario) a menos que se haya proporcionado un nombre de archivo diferente. Este archivo contiene diferentes secciones, pero el formato y el contenido exactos dependen de las opciones seleccionadas.
Si necesita más información sobre HPROF de la que contiene esta sección, consulte https://docs.oracle.com/javase/8/docs/technotes/samples/hprof.html.
El mandato java -Xrunhprof:help muestra las opciones disponibles:
- heap=dump|sites|all
- Esta opción ayuda al análisis del uso de la memoria. Comunica a HPROF que genere rastreos de la pila, desde los que puede ver dónde se ha asignado memoria. Si utiliza la opción heap=dump, obtendrá un volcado de todos los objetos activos en el almacenamiento dinámico. Con heap=sites, obtendrá una lista ordenada de sitios con los objetos asignados de mayor importancia al principio. El valor predeterminado all ofrece ambos tipos de salida.
- cpu=samples|times|old
- La opción cpu proporciona información útil a la hora de determinar a qué lugares el procesador destina la mayor parte de su tiempo. Si cpu está establecida en samples, la JVM detiene la ejecución e identifica qué llamada de método está activa. Si el porcentaje de muestreo es lo suficientemente alto, obtendrá una buena imagen de los lugares a que su programa dedica la mayor parte de su tiempo. Si cpu está establecida en times, recibirá medidas precisas de cuántas veces se llamó a cada método y de cuánto tiempo tardó cada ejecución. Aunque esta opción es más precisa, ralentiza el programa. Si cpu está establecida en old, los datos de definición de perfiles se producen en el formato HPROF antiguo.
- interval=y|n
- La opción interval únicamente se aplica a cpu=samples y controla el tiempo que la hebra de muestreo queda suspendida entre muestreos de las pilas de hebras.
- monitor=y|n
- La opción monitor puede ayudarle a entender cómo afecta la sincronización al rendimiento de su aplicación. Los supervisores implementan la sincronización de hebras. La obtención de información sobre supervisores puede informarle sobre cuánto tiempo las diferentes hebras están dedicando a intentar acceder a recursos que ya están bloqueados. HPROF también le ofrece una instantánea de los supervisores en uso. Esta información es útil para detectar puntos muertos.
- format=a|b
- El valor predeterminado para el archivo de salida es el formato ASCII. Establezca format en "b" si desea especificar un formato binario, necesario para algunos programas de utilidad como la herramienta de análisis de almacenamiento dinámico.
- file=<nombre_archivo>
- Utilice la opción file para cambiar el nombre del archivo de salida. El nombre predeterminado para un archivo ASCII es java.hprof.txt. El nombre predeterminado para un archivo binario es java.hprof.
- force=y|n
- Normalmente, el valor predeterminado (force=y) sobrescribe cualquier información existente en el archivo de salida. Por tanto, si tiene varias JVM que se ejecutan con HPROF habilitado, utilice force=n, que añade caracteres adicionales al nombre de archivo de salida según sea necesario.
- net=<host>:<puerto>
- Para enviar la salida a través de la red en lugar de a un archivo local, utilice la opción net.
- depth=<tamaño>
- La opción depth indica el número de marcos de método que visualizar en un rastreo de la pila. El valor predeterminado es 4.
- thread=y|n
- Si establece la opción thread en y, el ID de hebra se imprime junto a cada rastreo. Esta opción es útil si no puede ver qué hebra está asociada con qué rastreo. Este tipo de problema podría producirse en una aplicación multihebra.
- doe=y|n
- El comportamiento predeterminado es recopilar información de perfil cuando existe una aplicación. Para recopilar los datos de definición de perfiles durante la ejecución, establezca doe (volcado a la salida) en n.
- msa=y|n
- Esta característica no está soportada en las plataformas IBM SDK.
- cutoff=<valor>
- Muchas entradas de muestra se producen para un pequeño porcentaje del tiempo de ejecución total. De forma predeterminada, HPROF incluye todas las vías de acceso de ejecución que representan al menos el 0,0001 por ciento del tiempo utilizado por el procesador. Puede aumentar o disminuir dicho punto de límite de corte utilizando esta opción. Por ejemplo, para eliminar todas las entradas que representen menos de un cuarto de un porcentaje del tiempo de ejecución total, especifique cutoff=0.0025.
- verbose=y|n
- Esta opción genera un mensaje cuando se realizan volcados. El valor predeterminado es y.
- lineno=y|n
- Cada marco incluye normalmente el número de línea que se ha procesado, pero puede utilizar esta opción para suprimir los números de línea de la lista de salida. Si está habilitado, cada marco contiene el texto
Unknown lineen lugar del número de línea.TRACE 1056: java/util/Locale.toUpperCase(Locale.java:Unknown line) java/util/Locale.<init>(Locale.java:Unknown line) java/util/Locale.<clinit>(Locale.java:Unknown line) sun/io/CharacterEncoding.aliasName(CharacterEncoding.java:Unknown line)