Herramienta de análisis de rendimiento Guía del usuario de JProfile

Instalar JProfile

1.1 Instale el complemento JProfile en IDEA

  • Haga clic en Archivo->Configuración->Complementos en la idea, ingrese a la página del complemento, busque JProfile, haga clic en instalar para descargar e instalar, reinicie la idea después del éxito
    inserte la descripción de la imagen aquí
  • Abra la idea y vea el ícono de JProfile sobre la idea, lo que indica que el complemento se instaló correctamente
    inserte la descripción de la imagen aquí

1.2 Descargar e instalar el cliente JProfiler

URL del sitio web oficial: https://www.ej-technologies.com/products/jprofiler/overview.html
Licencia requerida

1.3 IDEA configura el archivo ejecutable de JProfiler

En términos generales, IDEA agregará automáticamente la ruta del archivo ejecutable de JProfiler, como se muestra en la figura:
inserte la descripción de la imagen aquí

2 Vista de seguimiento

2.1 Supervisión de JProfiler

Seleccione el elemento a monitorear, haga clic en el botón y la ventana de JProfiler aparecerá automáticamente y podrá monitorear el rendimiento de su propio código.
inserte la descripción de la imagen aquí
Si el código se ejecuta muy rápido, no se detectará. Puede configurar la suspensión o usar la entrada del teclado para controlar el código para que se ejecute y observar los cambios de rendimiento.

/**
 * 配合性能检测工具Jprofiler使用,键盘控制开始和结束
 */
Scanner in = new Scanner(System.in);
System.out.println("可以开始监测构建网格了吗:");
String a = in.next();
//待监测的运行代码块
System.out.println("可以结束监测了吗:");
String c = in.next();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

inserte la descripción de la imagen aquí

2.2 Vista de memoria (Memoria en vivo)

La sección de vista de memoria de JProfiler proporciona vistas dinámicamente actualizadas del uso de la memoria y vistas que muestran información sobre las asignaciones de memoria. Todas las vistas tienen varias capas de agregación y pueden mostrar objetos existentes y objetos que se recolectan como elementos no utilizados.

2.2.1 Todos los objetos (TODOS los objetos)

La vista Todos los objetos muestra una lista de todas las clases cargadas y el número de instancias asignadas en el montón.
inserte la descripción de la imagen aquí

Para ver asignaciones de objetos para un período de tiempo específico y registrar la pila de llamadas de la asignación, use la Vista de objetos registrados. Aquí hay un selector de nivel agregado, puede cambiar entre los siguientes tipos, como se muestra en la figura:
 clases (clases): cada fila muestra una sola clase, que es el tipo de agregado predeterminado
 paquetes (paquetes): cada una muestra una línea un solo paquete, los subpaquetes no están incluidos. Dentro de este nivel agregado, las tablas tienen forma de árbol. Puede hacer clic en el nodo del árbol para ver las clases que contiene, como se muestra en la Figura
 Componentes J2EE (componentes J2EE): cada fila es un componente J2EE. Este patrón es similar al filtro del patrón de clase, lo que le permite inspeccionar rápidamente los componentes J2EE cargados en la aplicación.
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Se muestran tres filas en la tabla, que se pueden ordenar y ver.
 Nombre: Mostrar clase, paquete o J2EE según el nivel agregado
 Número de instancias:
 Tamaño: Mostrar el tamaño total real de todas las asignaciones. Solo se incluye el tamaño del puntero correspondiente, no se incluye el tamaño de las matrices de referencia y las instancias. Se muestra en bytes. Solo se incluyen datos de objetos, no el tamaño de JVM utilizado por la clase, ni datos de clase ni tamaños de variables locales.

inserte la descripción de la imagen aquí

2.2.2 Objetos registrados

La vista Objetos registrados muestra una lista de todos los objetos y matrices registrados, incluida la cantidad de instancias asignadas en el montón. En esta vista solo se muestran los objetos registrados. Si se selecciona un paquete o una clase, puede saltar de la vista de objetos de registro al árbol de llamadas de asignación y puntos de acceso de asignación. El método es hacer clic con el botón derecho y seleccionar la vista a la que saltar.
Puede agregar paquetes o clases al rastreador de clases. Si el rastreador de clases no está grabando, comience a grabar todas las clases configuradas en el rastreador de clases; si graba un tipo de objeto diferente, todos los datos de grabación se borran.
inserte la descripción de la imagen aquí
La vista de objetos registrados se puede filtrar en función de la vida de los objetos:
 Los objetos vivos (objetos vivos)
muestran solo los objetos actualmente en la memoria
 Los objetos recolectados como basura (objetos recolectados como basura)
se muestran como objetos
recolectados objetos recolectados como basura)
muestra todos los objetos creados
inserte la descripción de la imagen aquí

2.2.3 Árbol de llamadas de asignación (Árbol de llamadas de asignación)

La vista de árbol de llamadas de asignación muestra un árbol o método de solicitud, clase, paquete o componente J2EE con información de asignación anotada para la clase seleccionada
inserte la descripción de la imagen aquí

2.2.4 Vista de puntos calientes de asignación

La vista Punto de acceso de asignación muestra una lista de métodos en los que se asignan los objetos de la clase seleccionada. Solo se muestran los métodos que están asignados al menos al 1% del total. Los métodos se pueden filtrar según la configuración de los conjuntos de filtros activos. Esta vista es algo similar a la vista de puntos calientes en la sección de CPU, excepto que muestra la cantidad de instancias y matrices de clases asignadas en lugar de métricas de tiempo.
Para cada punto de acceso, se puede mostrar su árbol de seguimiento.
inserte la descripción de la imagen aquí

2.2.5 Rastreador de clases

Para cada clase, hay seguimiento de clase.
inserte la descripción de la imagen aquí

2.3 Andador de montones

2.3.1 Clases¶

Muestre todas las clases y sus instancias
inserte la descripción de la imagen aquí
por cargador de clases:
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

2.3.2 Asignaciones

Muestra el árbol de asignación y los puntos de acceso de asignación para todos los objetos de registro

2.3.3 Índice (Referencias)

Proporciona visualización de gráficos de índice para objetos individuales y "muestra la ruta a la raíz de recolección de basura". También proporciona
la capacidad de fusionar vistas de entrada y salida.
inserte la descripción de la imagen aquí

2.3.4 Datos

Mostrar datos de instancia y clase para un solo objeto
inserte la descripción de la imagen aquí

2.3.5 Tiempo (Tiempo)

Muestra un histograma de tiempos de resolución para objetos grabados

2.4 Vista de la CPU

2.4.1 Vista de árbol de llamadas (vista de árbol de llamadas)

El árbol de llamadas muestra un árbol de llamadas de subprocesos de arriba a abajo. La visualización se puede filtrar hacia arriba o hacia abajo según la configuración del filtro.
JProfiler detecta automáticamente los componentes J2EE y muestra los nodos asociados en el árbol de llamadas. Use diferentes íconos para mostrar
diferentes tipos de componentes J2EE
 servlets: corazón amarillo invertido
 JSP: corazón azul invertido
 EJB: corazón rojo invertido
inserte la descripción de la imagen aquí
Para JSP y EJB, JProfiler muestra los nombres como:
 JSP: ruta del archivo fuente JSP
 EJB: interfaz EJB nombre
Si la URL se puede subdividir, cada solicitud de URL utiliza un símbolo especial para crear un nuevo nodo con URL: do, seguido de la solicitud de URL subdividida vista de árbol selección de nivel agregado Sí Cuatro: 
Método
, que también es el nivel predeterminado. Cada nodo es una llamada de método. Los métodos de componentes J2EE especiales tienen sus propios iconos y nombres para mostrar, mencionados anteriormente. El nombre real de la clase está encerrado entre corchetes
 Clase: Cada nodo es una clase separada. Los métodos de componentes J2EE especiales tienen sus propios iconos y nombres para mostrar, mencionados anteriormente. El nombre real de la clase está entre corchetes
 Paquete: Cada nodo es un paquete separado. No incluye subpaquetes
 Componente J2EE: cada nodo es un componente J2EE, si el componente tiene un nombre de visualización independiente, se omite el nombre de la clase real.
El árbol de llamadas no muestra todos los métodos en la JVM, solo:
 Clases sin filtrar: clases que no se filtran de acuerdo con la configuración de filtro configurada
 Llamadas de primer nivel de clases sin filtrar: llamadas de clases sin filtrar a clases filtradas La llamada de primer nivel, no se muestra la llamada al nivel más profundo de la clase de filtro. Los nodos filtrados están marcados en rojo en la esquina superior izquierda.
 Método de entidad de hilo: El método Runnable.run() y el método principal siempre se muestran, sin importar si está filtrado o no. Si el
modo de barra de porcentaje está configurado en la configuración de vista, cada nodo en el árbol de llamadas mostrará
un barra de porcentaje, que muestra el porcentaje actual del tiempo interno del nodo respecto al tiempo total, el nodo actual incluye todos sus nodos descendientes
y la parte resaltada en rojo

2.4.2 Vista de puntos calientes

La vista de punto de acceso muestra una lista de llamadas del tipo seleccionado. Los puntos que representan menos del 0,1 % del tiempo total se truncan.
El tipo de zona activa se puede seleccionar en el menú desplegable de "tipo de zona activa", que incluye dos tipos:
 llamadas a métodos (llamadas a métodos)
llamadas a métodos (mostrar clases filtradas por separado): calcule las zonas activas mostradas a partir de las llamadas a métodos, y las clases filtradas calculan sus propios puntos calientes. Este modo es el predeterminado.
Llamadas a métodos (agregue clases filtradas a la clase que llama): calcule los puntos de acceso mostrados a partir de las llamadas a métodos, y la clase llamada se agrega a la clase que llama, a menos que sea un método de entidad de subproceso (método de ejecución y principal)
inserte la descripción de la imagen aquí

2.4.3 Gráfico de llamadas (Gráfico de llamadas)

El gráfico de llamadas muestra estáticamente el gráfico de llamadas para los subprocesos calculados por el nodo seleccionado. Los nodos pueden ser métodos, clases, paquetes o
componentes J2EE.
Para calcular el gráfico de llamadas, haga clic en Generar gráfico en la barra de herramientas o seleccione Ver->Generar gráfico.
Antes del cálculo del gráfico, se inicia el asistente de gráficos de llamadas. El gráfico resultante es estático y se puede volver a calcular. El asistente de gráfico de llamadas
realiza un seguimiento de sus opciones más recientes.
inserte la descripción de la imagen aquí

3. Combinado con la aplicación práctica del algoritmo.

3.1 La memoria aumenta rápidamente

En términos generales, prestará atención a la memoria del montón, porque las fugas de memoria están principalmente en el montón.Si la curva de memoria continúa siendo alta, continúa aumentando o aumenta repentinamente en un punto determinado, se considera un problema.
inserte la descripción de la imagen aquí
Primero revise la pestaña Clases para verificar el número de objetos y el uso de memoria:
inserte la descripción de la imagen aquí
Nota: Como se puede ver en la figura, los objetos char[] y String ocupan mucha memoria, por lo que analizamos principalmente estos dos objetos. son Integer y BigDiecimal, La ocupación también es relativamente alta y debe analizarse.
Luego, haga clic en la pestaña Objetos más grandes para ver el objeto más grande en todo el montón para ver si lo usa un objeto grande: Nota:
inserte la descripción de la imagen aquí
como se puede ver en En la figura, hay dos objetos que ocupan una gran cantidad de memoria. Muchos, por lo tanto, analice principalmente estos dos objetos, por qué ocupan tanta memoria.
Expanda el árbol y encuentre que todos los objetos están referenciados en la clase de descubrimiento ICMP:
inserte la descripción de la imagen aquí
Explicación: Se puede ver a partir de esto que esta clase hace referencia a todos los objetos String. El atributo al que se hace referencia es list, y el tipo es ArrayList.
Haga clic derecho en la clase, seleccione Usar objetos seleccionados y seleccione Referencia en la interfaz emergente:

看到的数据是25000个小区的信息缓存在list中,然后构建网格时,又存入到新的list中。

 
 
  
  
  • 1

Supongo que te gusta

Origin blog.csdn.net/weixin_42218169/article/details/131888934
Recomendado
Clasificación