El generador de perfiles se incluye en las bibliotecas de rastreo de Datadog. Si ya estás utilizando APM para recopilar trazas (traces) para tu aplicación, puedes omitir la instalación de biblioteca e ir directamente a habilitar el generador de perfiles.
Añade el siguiente fragmento para iniciar el generador de perfiles:
err:=profiler.Start(profiler.WithService("<SERVICE_NAME>"),profiler.WithEnv("<ENVIRONMENT>"),profiler.WithVersion("<APPLICATION_VERSION>"),profiler.WithTags("<KEY1>:<VALUE1>","<KEY2>:<VALUE2>"),profiler.WithProfileTypes(profiler.CPUProfile,profiler.HeapProfile,// The profiles below are disabled by default to keep overhead
// low, but can be enabled as needed.
// profiler.BlockProfile,
// profiler.MutexProfile,
// profiler.GoroutineProfile,
),)iferr!=nil{log.Fatal(err)}deferprofiler.Stop()
Por defecto, el perfil de la CPU de Go solo muestra información detallada del código Go. Si tu programa llama a código C, el tiempo de ejecución del código C se refleja en el perfil, pero los stacks de llamadas solo muestran las llamadas a la función Go.
Para añadir información detallada de llamadas a la función C a los perfiles de CPU, puedes optar por utilizar la biblioteca como ianlancetaylor/cgosymbolizer. Para utilizar esta biblioteca:
Descarga el paquete dle sitio:
go get github.com/ianlancetaylor/cgosymbolizer@latest
Añade la siguiente importación en cualquier parte de tu programa:
import_"github.com/ianlancetaylor/cgosymbolizer"
Nota: Esta biblioteca se considera experimental. Puede causar bloqueos (poco frecuentes) en programas que utilicen excepciones C++, o que utilicen bibliotecas como tcmalloc, que también recopilan stacks de llamadas.
A partir de Go 1.21, el compilador Go admite la Optimización Guiada por Perfil (PGO). La PGO permite optimizaciones adicionales en el código identificado como caliente por los perfiles de CPU de las cargas de trabajo de producción. Es compatible con el Datadog Go Continuous Profiler y puede utilizarse para compilaciones de producción.
La guía Empezando con el generador de perfiles toma un ejemplo de servicio con un problema de rendimiento y te muestra cómo utilizar Continuous Profiler para comprender y solucionar el problema.