La profundidad de la comprensión de la máquina virtual Java Segunda edición (cuatro) rendimiento de la máquina virtual de la supervisión y la herramienta para solucionar problemas

JDK herramientas de línea de comandos (JPS: Herramienta de estado del proceso VM, jstat: Virtual Machine estadísticas vigilancia de herramienta, jinfo: Herramienta de configuración Java, jmap: herramientas de imagen de memoria de Java, jhat: una instantánea de las herramientas de análisis de la máquina montón de volcado virtuales, jstack: java herramienta de seguimiento de la pila ); herramientas de visualización (JConsole, VisualVM)

 

herramienta de línea de comandos A. JDK

  • JPS: JVM Proceso Estado de la herramienta, para mostrar todo el proceso de máquina virtual HotSpot dentro del sistema especificado
  • jstat: JVM Estadísticas herramienta de monitoreo, los usuarios recoger máquina virtual HotSpot para ejecutar todos los aspectos de los datos
  • jinfo: Configuración de Información para Java, configuración de máquina virtual de visualización de información
  • Volcado de memoria reproducción del mapa de memoria para Java, genera máquina virtual: jmap
  • jhat, JVM Heap Dump navegador, archivo de análisis Heapdump usuario, se creará un servidor HTTP / HTML, por lo que los usuarios pueden ver los resultados en un navegador
  • jstack, Seguimiento de la pila de Java, una instantánea de la pantalla de hilo de máquina virtual

1 JPS: herramienta de estado del proceso VM

JSP formato de comando:

JPS [opciones] [hostid]

JPS执行样例:
D: \ develop \ Java \ jdk1.6.0_21 \ bin> JPS-L
2388 D: \ Desarrollar \ glassfish \ bin \ .. \ modules \ admin-cli.jar
2764 com.sun.enterprise.glassfish .bootstrap.ASMain
3788 sun.tools.jps.Jps

 

2 jstat: Virtual Machine Estadísticas Herramienta de Monitoreo

Formato del comando jstat es:

jstat [opción VMID [intervalo [s | m] [count]]]

Parámetros de intervalo y representa el intervalo de consulta y contar el número de veces que, si se omite ambos parámetros, lo que indica que la consulta sólo una vez. Supongamos que desea consultar cada 250 milisegundos condiciones del proceso de recolección de basura 2764, un total de 20 preguntas, que el comando debe ser:

jstat -gc 2764 250 20

 

jstat Aplicar ejemplo: jstat -gcutil 2764

S0 y S1 P FGC FGCT YGCT YGC GCT
0,00 0,00 6,20 41,42 47,20 16 0. 105 3 0472 0577

Consulta resultados mostraron que: la nueva generación Eden District este servidor (E, expresado Edén) usando 6,2% del espacio, dos
áreas superviviente (S0, S1, representa Survivor0, Survivor1), que están vacías, el año de edad (O, Él representa antiguo), y
la generación permanente de (P, representa permanente), respectivamente, utilizando 47,20% y 41,42% del espacio. Desde el programa se ejecuta eran
Minor GC (YGC, representa GC Young) 16 veces, el tiempo total de 0,105 segundos, se produjo completa GC (FGC, expresada completa
GC) 3 veces, Encuadre de GC total de tiempo transcurrido (FGCT, expresado completa GC Time) a 0,472 segundos, todos Total GC tiempo transcurrido (GCT,
expresado tiempo GC) fue de 0,577 segundos

 

3 jinfo: herramienta de configuración Java

jinfo formato de comando:

jinfo [opción] pid

Aplicar ejemplo: valores de los parámetros CMSInitiatingOccupancyFraction consulta.
C: \> jinfo CMSInitiatingOccupancyFraction En Flag-1444
-XX: CMSInitiatingOccupancyFraction = 85

 

4 jmap: herramientas de imagen de memoria de Java

Formato del comando jmap:

jmap [opción] VMID

使用jmap生成volcado文件
C: \ Users \ IcyFenix> jmap-dump: format = b, file = eclipse.bin 3500
montón de dumping a C: \ Users \ IcyFenix \ eclipse.bin ......
archivo de volcado de pila creado

 

5 jhat: una instantánea de la herramienta de análisis de volcado de la máquina virtual montón

archivo de volcado de análisis de uso jhat

C: \ Users \ IcyFenix> jhat eclipse.bin 
lectura de eclipse.bin ...... 
archivo de volcado creado Vie Nov 19 de  22 de : 07 : 21 CST 2010 
Snapshot leer, resolver ...... 
Resolver 1225951 objetos ...... 
Chasing referencias, esperar 245 puntos ...... 
La eliminación de las referencias duplicadas ...... 
instantánea resuelto. 
Servidor HTTP iniciado en el puerto 7000 
del servidor está listo.

Los usuarios en el navegador, escriba http: // localhost: 7000 / puede ver los resultados

 

6 jstack: herramienta de seguimiento de pila de Java

Formato del comando jstack:

jstack [opción] VMID

 

 

Dos. Herramientas de visualización de JDK

JDK, además de proporcionar un gran número de herramientas de línea de comandos, hay dos potentes herramientas de visualización: jconsole y VisualVM

1 JConsole: Java Management Console Monitoreo y

1.1 Inicio JConsole

Por "jconsole.exe" comenzar en el JDK directorio / bin

 

 

 

 1.2 Monitor de Memoria

JConsole para código de monitor

/ ** 
 * memoria de objeto marcador de posición, un OOMObject objetivo de aproximadamente 64 KB 
 * -Xms -Xmx 100m 100m -XX: + UseSerialGC 
 * / 
público  clase OOMObject {
     público  byte [] = marcador de posición nueva nuevo  byte [64 * 1024 ]; 
}
público  de clase OOMObjectTest1 {
     pública  estática  vacío fillHeap ( int num) lanza InterruptedException { 
        Lista <OOMObject> list = nuevo ArrayList <OOMObject> ();
        para ( int i = 0; i <num; i ++ ) { 
            Thread.sleep ( 100 ); 
            list.add ( nuevo OOMObject ()); 
        } 
        System.gc (); 
    } 

    Pública  estática  vacíos principales (args String []) lanza InterruptedException { 
        fillHeap ( 1000); 
    } 
}

 

 

Al ejecutar el programa en la pestaña de "memoria" se puede ver la tendencia de ejecución Eden área presenta bloque de memoria una línea poligonal, y se puede ver en el gráfico, a finales de 1000 ciclos de realizar, ejecutar System.gc () después, aunque toda nueva generación de áreas Eden y superviviente, básicamente, se han despejado, pero el histograma representa la vieja era permanecer óptimas condiciones, que se carga en los datos montón sigue vivo después de las System.gc () realiza método

 

hilo 1.3 Seguimiento 

hilo espera demo de código

público  clase OOMObjectTest2 {
     / ** 
     * demostrar infinito hilo de bucle 
     * / 
    público  estático  void createBusyThread () { 
        el hilo Hilo = nuevo nuevo la rosca ( nuevo nuevo el Ejecutable () {
             público  void run () {
                 el tiempo ( true ) // línea 41 
                ; 
            } 
        } , "testBusyThread" ); 
        hilo.start (); 
    } 
    / ** 
     * hilo de espera de bloqueo para la demo 
     * / 
    pública  estática  vacío createLockThread (última cerradura Object) { 
        hilo de rosca = nuevo hilo ( nueva Ejecutable () {
             público  vacío run () {
                 sincronizada (bloqueo) {
                     try { 
                        lock.wait (); 
                    } catch (InterruptedException e) { 
                        e.printStackTrace (); 
                    } 
                } 
            } 
        }, "testLockThread" ); 
        hilo.start (); 
    } 
    Pública  estática  vacío main (String [] args)lanza excepción { 
        BufferedReader br = nuevo BufferedReader ( nuevo InputStreamReader (System.in)); 
        br.readLine (); 
        createBusyThread (); 
        br.readLine (); 
        Object obj = nuevo Object (); 
        createLockThread (obj); 
    } 
}

Después se ejecuta el programa, seleccionar primero la pestaña "Temas" en el hilo principal, el BufferedReader pantalla seguimiento de la pila de espera en el método de entrada de teclado readBytes System.in, después pase estado ejecutable, el estado Ejecutable hilo se le asignará tiempo de ejecución, pero readBytes cheques método para devolver inmediatamente la ejecución de la ruta ficha no ha sido actualizado, la espera sólo consumen muy pocos recursos de CPU.

 

 

Después de entrar en el teclado valor, entonces monitorear hilos testBusyThread, que ha llevado a cabo la circulación de aire, visto desde el seguimiento de la pila ha estado en línea 41 MonitoringTest.java estancias de código, 41 comportamiento: while (true). Este estado Ejecutable hilo del tiempo, y no regresó acción testigo del subproceso de ejecución, que se quedará sin espacio en todos los tiempos de ciclo de ejecución hasta que el interruptor de rosca, la espera va a consumir más recursos de CPU

 

 

hilo testLockThread en caso de espera para el objeto de bloqueo notificar o método notifyAll, a continuación, el hilo de espera en el estado de espera, no será asignado para realizar tiempo antes de ser despertado

 

 

 

 ejemplos de código estancamiento

público  de clase SynAddRunalbe implementos Ejecutable {
     int a, b;
    público SynAddRunalbe ( int a, int b) {
         este .a = a;
        este .b = b; 
    } 

    Pública  vacío run () {
         sincronizada (Integer.valueOf (a)) {
             sincronizada (Integer.valueOf (b)) { 
                System.out.println (a + b); 
            } 
        } 
    } 
}
público  clase OOMObjectTest3 {
     público  estáticas  void principales (String [] args) {
         para ( int i = 0; i <100; i ++ ) {
             nueva Thread ( nuevo SynAddRunalbe (1,2 )) start ().;
            nueva rosca ( nueva SynAddRunalbe (2,1 )) start ().; 
        } 
    } 
}

Después de que aparezca punto muerto hilo, haga clic en Panel de hilo JConsole "punto muerto detectado" botón, habrá un nuevo "muerto pestaña de bloqueo".

 

 

2 VisualVM: en-una herramienta de solución de problemas

2.1 Inicio JConsole

Por "jvisualvm.exe" comenzar en el JDK directorio / bin

 

 

2.2 descarga plug-in

 "Herramientas" → "widget" → "es la portadora" del menú, a continuación, especifique el cuadro de diálogo paquete de ruta nbm que puede ser instalado, el tapón se monta se almacena en JDK_HOME / lib / VisualVM / VisualVM en

dirección de plug-centro: http: // VisualVM java.net/pluginscenters.html.

 

 

Aviso: Este artículo es un notas de estudio personales, el contenido de "comprensión en profundidad de la máquina virtual de Java JVM · características avanzadas y mejores prácticas" Zhou Zhiming y artículos en línea

Supongo que te gusta

Origin www.cnblogs.com/xyzshm/p/12602120.html
Recomendado
Clasificación