Monitoreo Cerraduras con Java registrador de vuelo y control de la misión de Java

Patrick:

Lo que quiero hacer

Tengo un programa en Java que estoy tratando de mejorar. Sospecho bloques sincronizados dentro del código para perjudicar el rendimiento, pero me gustaría asegurarse de que esto es mi problema antes de tocar mi código.

¿Cómo fui a al respecto

Para comprobar si los bloques sincronizados son realmente el problema, grabé la ejecución de mi programa en un servidor de prueba con los registradores de vuelo, creado descargado el jfrarchivo en mi escritorio y abrí con control de la misión de Java. Sin embargo, la Lock Instancespágina Java Applicationno muestra nada. La única pista que se ve es un mensaje en la vista de los resultados que se lee:

La regla de bloqueo Java requiere evento (s) que esté disponible a partir de los siguientes tipos de eventos: com.oracle.jdk.JavaMonitorEnter

Por lo tanto, estoy asumiendo que debe haber algún tipo de opción para activar junto con el registrador de vuelo, pero no he podido encontrar hasta ahora.

Mi pregunta

Cómo hacerlo eventos del com.oracle.jdk.JavaMonitorEntertipo que se registrado por el registrador de vuelo de Java?
O me estoy perdiendo algo más y no hay una mejor manera de calcular la cantidad de bloqueo en los bloques sincronizados se hace en un programa Java?

mi entorno

Estoy utilizando Oracle JDK versión 1.8.0_191. La versión de la Misión de Control de Java que estoy utilizando en mi escritorio es 6.0.0. Por último, el comando que utilizo para grabar la ejecución de mi programa es el siguiente:

java -XX:+UnlockCommercialFeatures -XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints -XX:+FlightRecorder -XX:StartFlightRecording=settings=profile,dumponexit=true,filename=test.jfr -classpath lib/*:src/ <my program with its arguments>

También me gustaría añadir que la conexión al servidor directamente con el Control de Misión de Java no es una opción (o es?) Como yo estoy usando un rebote ssh para conectarse a él en realidad ...

Patrick:

Una investigación liitle más en mi propia me dio la respuesta.

Los eventos JavaMonitorEnter (y otros eventos que a uno le gustaría Monitor) necesidad de ser especificados en un archivo de configuración registrador de vuelo. En esta situación, que estaba usando la profileconfiguración que se proporciona junto con la defaultconfiguración con el Oracle JDK.

He creado mi propia configuración mediante control de la misión de Java. Este blog fue muy útil en la presentación de cómo encontrar la herramienta para crear configuraciones de grabación personalizada en el Control de Misión de Java.

a continuación, he exportado la configuración de mi nueva creación, subido en mi entorno de prueba y especifica esta configuración en mi comando (por debajo de la opción modificada solamente):

-XX:StartFlightRecording=settings=/home/<username>/Custom,<other options>...

Lo que mi problema era en realidad

Grabaciones de bloqueo se activan en las configuraciones de los registradores de vuelo proporcionados por el JDK de Oracle. Sin embargo, para los bloqueos a realmente ser grabada, que necesitan para durar más de un cierto umbral (20 ms en la defaultconfiguración, de 10 ms en la profileconfiguración).

En mi solicitud, bloqueos individuales eran más cortas que este umbral, por lo tanto, no apareció cuando abrí la grabación en el control de la misión de Java.

Mi principal fuente de confusión fue el mensaje que indica que la "regla de bloqueo de Java requiere que esté disponible eventos ...". Una descripción más exacta de mi situación sería que no hay bloqueos que superan el umbral de configuración se registraron .

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=280893&siteId=1
Recomendado
Clasificación