Visualizaciones de perfiles

Buscar perfiles

Ve a APM -> Profiles (APM -> Perfiles) y selecciona un servicio para ver sus perfiles. Selecciona un tipo de perfil para ver diferentes recursos (por ejemplo, CPU, Memoria, Excepción y E/S).

Puedes filtrar según etiquetas de infraestructura o etiquetas de aplicación configuradas desde tu configuración de rastreo de entorno. Por defecto están disponibles las siguientes facetas:

FacetaDefinición
EntornoEl entorno en el que se ejecuta tu aplicación (production, staging).
ServicioEl nombre del servicio en el que se ejecuta tu código.
VersiónLa versión de tu código.
HostEl nombre de host en el que se ejecuta tu proceso de generación de perfiles.
Tiempo de ejecuciónEl tipo de tiempo de ejecución que está ejecutando el proceso de generación de perfiles (JVM, CPython).

Existen las siguientes medidas:

MediciónDefinición
CPUUso de la CPU, medido en núcleos.
Asignación de memoriaTasa de asignación de memoria a lo largo del perfil. Este valor puede ser superior a la cantidad de memoria de tu sistema, ya que la memoria asignada puede recopilarse de los elementos no usados durante el perfil.
Tiempo de paredEl tiempo transcurrido utilizado por el código. El tiempo transcurrido incluye el tiempo en que el código se está ejecutando en la CPU, esperando la E/S y cualquier otra cosa que ocurra mientras se está ejecutando.

Para cada tiempo de ejecución, también hay disponible un conjunto más amplio de métricas, que puedes consultar ordenado por series temporales.

Tipos de perfiles

En la pestaña Profiles (Perfiles), puedes ver todos los tipos de perfil disponibles para un lenguaje determinado. Según el lenguaje, la información recopilada sobre tu perfil difiere. Consulta Tipos de perfil para ver una lista de tipos de perfil disponibles para cada lenguaje.

Visualizaciones

Gráfico de llama

La gráfica de llamas es la visualización por defecto de Continuous Profiler. Muestra cuánta CPU utilizó cada método (ya que se trata de un perfil de CPU) y cómo se llamó a cada método.

Una gráfica de llamas

Por ejemplo, empezando por la primera fila de la imagen anterior, Thread.run() llamó a ThreadPoolExecutor$Worker.run(), que llamó a ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker), y así sucesivamente.

La anchura de un cuadro representa la cantidad de CPU total que ha consumido. A la derecha, puedes ver una lista principal de Tiempo de CPU por método que sólo tiene en cuenta el tiempo propio, que es el tiempo que un método pasó en la CPU sin llamar a otro método.

Las gráficas de llamas pueden incluirse en dashboards y notebooks con el widget de Gráfica de llamas de generación de perfiles.

Perfil único

Por defecto, los perfiles se cargan una vez por minuto. Según el lenguaje, estos procesos generan perfiles entre 15s y 60s.

Para ver un perfil concreto, establece la opción Visualize as (Visualizar como) en Profile List (Lista de perfil) y haz clic en un elemento de lista:

Seleccionar un perfil único

El encabezado contiene información asociada a tu perfil, como el servicio que lo generó, o el entorno y la versión del código asociados a él.

Debajo del encabezado del perfil hay cuatro pestañas:

PestañaDefinición
PerfilesUna gráfica de llamas y una tabla de resumen del perfil que estás consultando. Puedes cambiar entre tipos de perfil (por ejemplo, CPU, Memory allocation).
AnálisisUn conjunto de heurísticas que sugieren posibles problemas o áreas de mejora en tu código. Sólo disponible para Java.
MétricasMétricas del perfilador procedentes de todos los perfiles del mismo servicio.
Información del tiempo de ejecuciónPropiedades de tiempo de ejecución en los lenguajes admitidos y etiquetas de perfil.

Nota: En la esquina superior derecha de cada perfil, hay opciones para:

  • Comparar este perfil con otros
  • Ver la confirmación del repositorio
  • Ver trazas para el mismo proceso y periodo
  • Descargar el perfil
  • Abrir el perfil en página completa

Vista cronológica

La vista cronológica es equivalente a la gráfica de llamas, con patrones basados en el tiempo y la distribución del trabajo a lo largo del periodo de un único perfil, un único proceso en el profiling explorer y una traza.

En comparación con la gráfica de llamas, la vista cronológica puede ayudar a:

  • Aislar los métodos con picos
  • Resolver interacciones complejas entre subprocesos
  • Actividad superficial en tiempo de ejecución que afectó el proceso
Una cronología

Para acceder a la vista cronológica:

  1. Ve a APM > Profiles > Explorer (APM > Perfiles > Explorador).
  2. Establece la opción Visualize as (Visualizar como) en Thread Timeline (Cronología de subproceso).

Según el tiempo de ejecución y del lenguaje, las líneas cronológicas varían:

Cada línea representa un subproceso. Los subprocesos de un grupo común se agrupan. Puedes ampliar el grupo para ver los detalles de cada subproceso.

Las líneas de la parte superior son actividades en tiempo de ejecución que pueden afectar al rendimiento.

Para obtener información adicional sobre la depuración de solicitudes p95 lentas o tiempos de espera utilizando la cronología, consulta la entrada del blog Understanding Request Latency with Profiling.

Consulta requisitos previos para saber cómo activar esta función para Python.

Cada línea representa un subproceso. Los subprocesos de un grupo común se agrupan. Puedes ampliar el grupo para ver los detalles de cada subproceso.

Consulta requisitos previos para saber cómo activar esta función para Go.

Cada línea representa una goroutine. Las goroutines creadas por la misma sentencia go están agrupadas. Puedes expandir el grupo para ver los detalles de cada goroutine.

Las líneas de la parte superior son actividades en tiempo de ejecución que pueden afectar al rendimiento.

Para obtener información adicional sobre la depuración de solicitudes p95 lentas o tiempos de espera utilizando la cronología, consulta la entrada del blog Debug Go Request Latency with Datadog’s Profiling Timeline.

Consulta requisitos previos para saber cómo activar esta función para Ruby.

Cada línea representa un subproceso. Los subprocesos de un grupo común se agrupan. Puedes ampliar el grupo para ver los detalles de cada subproceso.

El ID del subproceso se muestra como native-thread-id (ruby-object-id) donde el ID del subproceso nativo es Thread#native_thread_id (cuando está disponible) y el ID del objeto Ruby es Thread#object_id.

Nota: La VM de Ruby o tu sistema operativo pueden reutilizar IDs de subprocesos nativos.

Consulta requisitos previos para saber cómo activar esta función para Node.js.

Hay una línea para el subproceso de JavaScript.

También puede haber líneas que visualicen varios tipos de actividad asíncrona consistente de solicitudes DNS y operaciones de conexión TCP. El número de líneas coincide con la concurrencia máxima de estas actividades para que puedan visualizarse sin solapamientos.

Las líneas de la parte superior son actividades de tiempo de ejecución del recopilador de elementos no usados que pueden añadir latencia adicional a tu solicitud.

Cada línea representa un subproceso. Los subprocesos con el mismo nombre se agrupan. Puedes expandir un grupo para ver los detalles de cada subproceso. Ten en cuenta que los subprocesos creados explícitamente por código se agrupan en Subprocesos administrados.

Las líneas de la parte superior son actividades en tiempo de ejecución que pueden afectar al rendimiento, como actividad GC.

El ID del subproceso se muestra como <unique-id> [#OS-thread-id].

Nota: Tu sistema operativo puede reutilizar los IDs de los subprocesos.

Consulta requisitos previos para saber cómo activar esta función para PHP.

Hay una línea para cada subproceso de PHP (en PHP NTS, sólo hay una línea, ya que sólo hay un subproceso por proceso). Las fibras que se ejecutan en este subproceso se representan en la misma línea.

Las líneas de la parte superior son actividades de tiempo de ejecución que pueden añadir latencia adicional a tu solicitud, debido a la compilación de archivos y la recopilación de elementos no usados.

La vista cronológica actualmente no es compatible con el perfilado de Full Host

Referencias adicionales