Todos los productos
Search
Centro de documentos

Application Real-Time Monitoring Service:Localice cuellos de botella de rendimiento con gráficos de flamas

Última actualización: Sep 04, 2026

Cuando los servidores de su aplicación presentan un alto uso de CPU o consumo de memoria y necesita identificar los métodos responsables, un gráfico de flamas señala las rutas de llamada exactas que más recursos consumen. El perfilado continuo de Application Real-Time Monitoring Service (ARMS) genera gráficos de flamas para analizar la causa raíz de cuellos de botella de rendimiento, como el alto uso de CPU, el consumo excesivo de memoria y los picos de latencia.

Cómo leer un gráfico de flamas

Un gráfico de flamas visualiza datos muestreados de pilas de llamadas en un solo diagrama. Cada cuadro representa una función dentro de la pila de llamadas.

f13b95a2436706e37974aad93e9e0a40

Los dos ejes codifican información diferente:

Eje

Representa

Detalles

Eje X

Proporción del uso total de recursos

Los cuadros más anchos consumen más CPU o memoria. El eje X no representa el paso del tiempo. Las funciones se ordenan alfabéticamente para fusionar marcos de pila idénticos; esto maximiza la consolidación de marcos y resalta las rutas de llamada más significativas.

Eje Y

Profundidad de la pila de llamadas

La base de la pila contiene las funciones del punto de entrada. La cima de la pila contiene las funciones secundarias llamadas más recientemente.

En ciencias de la computación, una pila es un tipo de dato abstracto que funciona como una colección de elementos con dos operaciones principales: Push (inserta elementos en la pila) y Pop (elimina elementos de la pila). En un gráfico de flamas, cuanto más tiempo tarda una función en ejecutarse, más tiempo consume su función padre y más ancho aparece su cuadro. Al comparar gráficos de flamas en diferentes momentos, puede diagnosticar y resolver cuellos de botella de rendimiento de manera eficiente.

Tiempo propio frente a tiempo total

El ancho del cuadro de una función representa su tiempo total: el tiempo empleado en la propia función más todas las funciones a las que llama. La parte del cuadro sin una función secundaria directamente debajo representa el tiempo propio de la función; es decir, el tiempo dedicado a ejecutar su propio código, excluyendo las llamadas a otras funciones.

Al analizar cuellos de botella, céntrese en las funciones con un tiempo propio alto. Un cuadro ancho no siempre indica una función lenta; podría simplemente llamar a muchas funciones secundarias.

Gráfico de flamas frente a gráfico de carámbanos

Los gráficos de flamas tienen dos orientaciones de diseño que muestran los mismos datos:

Diseño

Cima de la pila

Base de la pila

Dirección de análisis

Gráfico de flamas

Parte superior del diagrama

Parte inferior del diagrama

De abajo hacia arriba

Gráfico de carámbanos

Parte inferior del diagrama

Parte superior del diagrama

De arriba hacia abajo

Gráfico de flamas

f13b95a2436706e37974aad93e9e0a40

Gráfico de carámbanos

imagen

Identifique un cuello de botella en tres pasos

image

Paso

Acción

Razón

1

Determine el diseño. Identifique si el diagrama es un gráfico de flamas o de carámbanos y localice la cima de la pila.

Las funciones que causan cuellos de botella aparecen en la cima de la pila.

2

Busque cuadros anchos en la cima de la pila. Los cuadros anchos en la cima de la pila indican funciones que consumen una gran proporción de recursos.

Ancho = proporción del uso total de recursos.

3

Rastree hasta el código de su aplicación. Desde el cuadro ancho en la cima de la pila, siga la cadena de llamadas hasta encontrar el primer método definido por su aplicación, no un método de biblioteca o framework.

Las funciones de biblioteca no se pueden optimizar directamente. Investigue el primer método definido por la aplicación en la cadena.

Ejemplo: identificación de un cuello de botella de CPU

El siguiente gráfico de carámbanos muestra un alto uso de CPU. Para reproducir este análisis, habilite la función de perfilado continuo para su aplicación.

imagen

Paso 1: determinar el diseño

Este es un gráfico de carámbanos: la base de la pila está en la parte superior y la cima de la pila está en la parte inferior. Analice de abajo hacia arriba.

Paso 2: buscar cuadros anchos en la cima de la pila

El método java.util.LinkedList.node(int), ubicado en el lado derecho de la cima de la pila, tiene un cuadro ancho, lo que indica un alto consumo de recursos.

Paso 3: rastrear hasta el código de la aplicación

java.util.LinkedList.node(int) es una función de biblioteca del Java Development Kit (JDK), no código de la aplicación. Rastree hacia arriba a través de la cadena de llamadas:

Método

Tipo

Acción

java.util.LinkedList.node(int)

Función de biblioteca JDK

Continúe el rastreo.

java.util.LinkedList.get(int)

Función de biblioteca JDK

Continúe el rastreo.

com.alibaba.cloud.pressure.memory.HotSpotAction.readFile()

Código de la aplicación

Primer método definido por la aplicación encontrado.

Resultado: HotSpotAction.readFile() consume 3.89 segundos, lo que representa el 76.06% de la pila. Este método es el cuello de botella principal. Revise su implementación para determinar si se puede optimizar el patrón de llamadas.

Cuello de botella secundario

El método java.net.SocketInputStream, en la esquina inferior izquierda del gráfico, conduce a otro método de la aplicación: com.alibaba.cloud.pressure.memory.HotSpotAction.invokeAPI, que representa aproximadamente el 23% de la pila.

Pasos siguientes

Diagnostique problemas específicos de rendimiento:

Resuelva problemas de perfilado continuo: