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
- Abra la idea y vea el ícono de JProfile sobre la idea, lo que indica que el complemento se instaló correctamente
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:
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.
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
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.
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.
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.
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.
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
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
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.
2.2.5 Rastreador de clases
Para cada clase, hay seguimiento de clase.
2.3 Andador de montones
2.3.1 Clases¶
Muestre todas las clases y sus instancias
por cargador de clases:
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.
2.3.4 Datos
Mostrar datos de instancia y clase para un solo objeto
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
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)
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.
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.
Primero revise la pestaña Clases para verificar el número de objetos y el uso de memoria:
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:
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:
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