Perfiles faltantes en la página de búsqueda de perfiles

Si has configurado el generador de perfiles y no ves perfiles en la página de búsqueda de perfiles, activa el modo de depuración y abre un ticket de asistencia. En el ticket de asistencia, incluye los archivos de depuración junto con la siguiente información:

  • Tipo y versión del sistema operativo (por ejemplo, Linux Ubuntu 22.04)
  • Tipo de tiempo de ejecución, versión y proveedor (por ejemplo, Ruby 2.7.3)

Perfiles faltantes en tareas de Resque

Al generar perfiles de tareas de Resque, debes configurar la variable de entornoRUN_AT_EXIT_HOOKS como 1, como se describe en la documentación de Resque.

Sin esta marca, los perfiles de tareas de Resque de corta duración no estarán disponibles.

La generación de perfiles no se activa debido al fallo de la compilación de la cabecera just-in-time de la máquina virtual de Ruby

Existe una incompatibilidad conocida entre Ruby 2.7 y versiones anteriores de GCC (4.8 y anteriores) que afecta al generador de perfiles (informe de Ruby subsiguiente, informe de fallos dd-trace-rb). Esto puede dar lugar al siguiente mensaje de error “Tu instalación de ddtrace no es compatible con el Continuous Profiler debido al fallo de la compilación de la cabecera just-in-time de la máquina virtual Java de Ruby. Tu compilador de C o el compilador just-in-time de la máquina virtual Java de Ruby parecen estar averiados”.

Para solucionarlo, actualiza tu sistema operativo o imagen Docker para que la versión de GCC sea más reciente que la versión 4.8.

Para obtener más ayuda con este problema, ponte en contacto con el servicio de asistencia e incluye el resultado de la ejecución de DD_PROFILING_FAIL_INSTALL_IF_MISSING_EXTENSION=true gem install ddtrace y el archivo mkmf.log resultante.

Se omiten los marcos cuando los backtraces son demasiado profundos

El generador de perfiles Ruby trunca los backtraces profundos cuando recopila datos de generación de perfiles. A los backtraces truncados les faltan algunas de sus funciones de llamada, lo que hace imposible vincularlos al marco de llamada raíz. Como resultado, los backtraces truncados se agrupan en un marco N frames omitted.

Puedes aumentar la profundidad máxima con la variable de entornoDD_PROFILING_MAX_FRAMES o en código:

Datadog.configure do |c|
  c.profiling.advanced.max_frames = 500
end

Fallos o errores inesperados de los gems de Ruby que utilizan extensiones nativas

El generador de perfiles Ruby recopila datos enviando señales UNIX SIGPROF a las aplicaciones Ruby, lo que permite una recopilación de datos más detallada.

El envío de SIGPROF es una estrategia de generación de perfiles frecuente y puede causar la interrupción de las llamadas al sistema desde extensiones/bibliotecas nativas con un código de error EINTR del sistema. En raras ocasiones, las extensiones o bibliotecas nativas llamadas pueden tener una gestión de errores faltante o incorrecta para el código de error EINTR.

Se conocen las siguientes incompatibilidades:

En estos casos, la última versión del generador de perfiles detecta automáticamente la incompatibilidad y aplica una solución alternativa.

Si encuentras fallos o errores en los gems de Ruby que utilizan extensiones nativas distintas de las mencionadas anteriormente, puedes habilitar manualmente la solución alternativa “sin señales”, que evita el uso de señales SIGPROF. Para habilitar esta solución alternativa, configura la variable de entornoDD_PROFILING_NO_SIGNALS_WORKAROUND_ENABLED como true o en código:

Datadog.configure do |c|
  c.profiling.advanced.no_signals_workaround_enabled = true
end

Informa a nuestro equipo si encuentras o sospechas de alguna incompatibilidad abriendo un ticket de asistencia. De este modo, Datadog podrá añadirlas a la lista de detección automática y trabajar con los autores del gem o de la biblioteca para solucionar el problema.

Fallos de segmentación en gc_finalize_deferred en las versiones de Ruby 2.6 a 3.2

Una solución alternativa para este problema se aplica automáticamente desde la versión 1.21.0 dd-trace-rb. Para solucionar este problema, Datadog recomienda actualizar a esta versión o una posterior.

Antes de la versión 1.21.0, en raras situaciones el generador de perfiles podía activar Ruby VM Bug #19991 que se manifiesta como un “Fallo de segmentación” con una traza (trace) de stack tecnológico de fallos que incluye la función gc_finalize_deferred.

Este error se ha corregido para Ruby v3.3 y posteriores. Para versiones anteriores de Ruby (y anteriores a dd-trace-rb v1.21.0), puedes utilizar la solución alternativa “sin señales” para resolver este problema.

Para habilitar esta solución alternativa, establezca la variable de entornoDD_PROFILING_NO_SIGNALS_WORKAROUND_ENABLED como true o en código:

Datadog.configure do |c|
  c.profiling.advanced.no_signals_workaround_enabled = true
end

Referencias adicionales

Más enlaces, artículos y documentación útiles: