Todos los productos
Search
Centro de documentos

Application Real-Time Monitoring Service:Diagnóstico de llamadas Java lentas con code hotspot

Última actualización: Sep 04, 2026

La función code hotspot de ARMS es una herramienta de monitoreo y diagnóstico que utiliza continuous profiling para capturar instantáneas de las pilas de hilos de solicitud. Esto proporciona una vista precisa y en tiempo real de la ejecución del código para ayudarle a identificar problemas de rendimiento.

Casos de uso

  • Localice rápidamente el código problemático cuando se produzcan llamadas lentas durante eventos de alto tráfico, como promociones de ventas.

  • Guarde automáticamente el contexto de ejecución cuando el sistema encuentre un volumen elevado de llamadas lentas.

  • Reconstruya la ruta de ejecución exacta a nivel de método para llamadas lentas complejas o intermitentes que resultan difíciles de reproducir.

  • Cuando un trace carece de instrumentación para métodos que no pertenecen al framework, la función code hotspot le ayuda a determinar el tiempo de ejecución real de estas llamadas a métodos.

Requisitos previos

  • La función code hotspot requiere la versión 3.1.4 o posterior del agente.

  • La función code hotspot depende de continuous profiling, lo cual implica requisitos específicos para el kernel del sistema operativo y la versión del JDK. Para obtener más información, consulte Limitations. Asegúrese de utilizar un sistema operativo y un JDK compatibles.

  • Las versiones del agente anteriores a la 4.2.1 solo admiten llamadas síncronas. Es posible que se pierdan datos en llamadas asíncronas. Por ejemplo, si utiliza Spring Cloud Gateway, Undertow o Lettuce, el cambio de hilos asíncronos puede provocar imprecisiones en la recopilación de datos. La versión 4.2.1 y posteriores del agente son compatibles con escenarios asíncronos.

Habilitar code hotspot

  1. Inicie sesión en la consola de ARMS. En el panel de navegación izquierdo, seleccione Application Monitoring > Applications.

  2. En la página Applications, seleccione una región en la parte superior y haga clic en el nombre de su aplicación.

    Nota

    Los iconos en la columna Language indican lo siguiente:

    Java图标: una aplicación Java conectada a Application Monitoring.

    image: una aplicación Go conectada a Application Monitoring.

    image: una aplicación Python conectada a Application Monitoring.

    -: una aplicación conectada a Trace Explorer (OpenTelemetry).

  3. En el panel de navegación izquierdo, haga clic en Application Settings y luego en la pestaña Custom Configuration.

  4. En la sección Continuous profiling, active el Main switch y después el interruptor Code Hotspot. Configure las direcciones IP de las instancias de la aplicación o el bloque CIDR del grupo de instancias donde desea habilitar esta función.

  5. En la parte inferior de la página, haga clic en Save.

    Los cambios surten efecto de inmediato sin necesidad de reiniciar la aplicación.

Análisis de datos de code hotspot

Este ejemplo analiza e itera sobre datos JSON y, a continuación, llama a una API HTTP descendente.

public class HotSpotAction extends AbsAction {
  private RestTemplate restTemplate = new RestTemplate();
  // Request entry method.
  @Override
  public void runBusiness() {
    readFile();
    invokeAPI();
  }
  // Make an HTTP call.
  private void invokeAPI() {
    String url = "https://httpbin.org/get";
    String response = restTemplate.getForObject(url, String.class);
  }
   // Read and parse file data.
  private double readFile() {
    InputStreamReader reader = new InputStreamReader(
        ClassLoader.getSystemResourceAsStream("data/xxx.json"));
    LinkedList<Movie> movieList = GSON.fromJson(reader, new TypeToken<LinkedList<Movie>>() {
    }.getType());
    double totalCount = 0;
    for (int i = 0; i < movieList.size(); i++) {
      totalCount += movieList.get(i).rating();
    }
    return totalCount;
  }
}
  1. Inicie sesión en la consola de ARMS. En el panel de navegación izquierdo, seleccione Application Monitoring > Applications.

  2. En la página Applications, seleccione una región en la parte superior y haga clic en el nombre de su aplicación.

    Nota

    Los iconos en la columna Language indican lo siguiente:

    Java图标: una aplicación Java conectada a Application Monitoring.

    image: una aplicación Go conectada a Application Monitoring.

    image: una aplicación Python conectada a Application Monitoring.

    -: una aplicación conectada a Managed Service for OpenTelemetry.

  3. En el panel de navegación izquierdo, haga clic en Interface Invocation. En el lado derecho de la página, seleccione la interfaz objetivo y luego haga clic en la pestaña trace query.

  4. En la pestaña trace query, haga clic en el enlace TraceId correspondiente.

  5. En la columna Details, haga clic en el icono de lupa y luego en la pestaña Code Hotspot.

    El panel izquierdo enumera todos los métodos involucrados en esta llamada y sus tiempos de ejecución. El panel derecho muestra un gráfico de flamas que visualiza los stack traces del método seleccionado.

    • La columna Self muestra el tiempo o los recursos consumidos por un método dentro de su propia ejecución, sin incluir el tiempo o los recursos consumidos por sus métodos secundarios. Esto le ayuda a identificar los métodos que dedican una cantidad significativa de tiempo a su propia lógica.

    • La columna Total muestra el tiempo o los recursos consumidos por un método y todos sus métodos secundarios. Esto le permite comprender qué métodos contribuyen más al tiempo total de ejecución de la pila de llamadas.

    Para identificar puntos críticos específicos del código, céntrese en la columna Self o busque barras anchas en la parte inferior del gráfico de flamas. Una barra ancha indica una causa raíz de alta latencia y suele representar un cuello de botella en el rendimiento del sistema, como el método java.lang.Thread.sleep().

    Analice los datos de la siguiente manera:

    1. Ordene la columna Self en orden descendente. Haga clic en el método con el valor Self más alto, por ejemplo, java.util.LinkedList.node(int). El gráfico de flamas de la derecha se centrará en los métodos relevantes.

    2. La vista enfocada muestra que java.util.LinkedList.node(int) corresponde a la barra más ancha en la parte superior de la pila del gráfico de flamas.

    3. Este método es una función de biblioteca del Java Development Kit (JDK), no forma parte de la lógica de negocio de su aplicación. Para encontrar el origen en su código, rastree la pila de llamadas hacia arriba desde java.util.LinkedList.node(int). Este es invocado por java.util.LinkedList.get(int), que a su vez es llamado por com.alibaba.cloud.pressure.memory.HotSpotAction.readFile(). El método com.alibaba.cloud.pressure.memory.HotSpotAction.readFile() forma parte de su aplicación. En este ejemplo, consume 3.75 s, lo que representa el 69.88 % del tiempo total en el gráfico de flamas. Esto indica que com.alibaba.cloud.pressure.memory.HotSpotAction.readFile() es un cuello de botella significativo en el rendimiento. Analice la lógica de este método para identificar oportunidades de optimización.

Preguntas frecuentes

  • ¿Por qué la duración mostrada en code hotspot es menor que la duración total de la solicitud?

    Para minimizar el impacto en el rendimiento de su aplicación, la función code hotspot utiliza un mecanismo de recopilación optimizado. Esto puede causar que la duración registrada sea ligeramente inferior a la duración real de la solicitud. La desviación suele ser menor a 20 ms. Ignore esta pequeña diferencia y céntrese en los métodos con la mayor duración relativa.

  • ¿Existen limitaciones en el rango de recopilación de datos para code hotspot?

    • Para solicitudes que duran más de 15 minutos, la función code hotspot proporciona datos de análisis solo para los primeros 15 minutos.

    • Para reducir la sobrecarga del sistema, ARMS no recopila datos de code hotspot para solicitudes de baja latencia. Por lo general, se trata de solicitudes que se completan en menos de 500 ms, aunque el umbral exacto se determina dinámicamente según la carga del sistema. Como resultado, es posible que la pestaña no muestre datos para estas solicitudes.

Temas relacionados

Puede utilizar la función continuous profiling para solucionar problemas de alto uso de CPU y memoria. Para obtener más información, consulte los siguientes temas:

Para problemas comunes con continuous profiling, consulte FAQ.