This page is not yet available in Spanish. We are working on its translation.
If you have any questions or feedback about our current translation project, feel free to reach out to us!

In the Profiles tab, you can see all profile types available for a given language. Depending on the language and version, the information collected about your profile differs.

Once profiling is enabled, the following profile types are collected for supported Go versions:

CPU Time
The time each function spent running on the CPU. Off-CPU time such as waiting for Networking, Channels, Mutexes, and Sleep are not captured in this profile. See Mutex and Block profiles.
Allocations
The number of objects allocated by each function in heap memory during the profiling period (default: 60s), including allocations which were subsequently freed. Go calls this alloc_objects. Stack allocations are not tracked. This is useful for investigating garbage collection load. See also the note about how this measure changes in version 1.33.0 in Delta profiles.
Allocated Memory
The amount of heap memory allocated by each function during the profiling period (default: 60s), including allocations which were subsequently freed. Go calls this alloc_space. Stack allocations are not tracked. This is useful for investigating garbage collection load. See also the note about how this measure changes in version 1.33.0 in Delta profiles.
Heap Live Objects
The number of objects allocated by each function in heap memory that have not yet been garbage collected. Go calls this inuse_objects. This is useful for investigating the overall memory usage of your service and identifying potential memory leaks.
Heap Live Size
The amount of heap memory allocated by each function that has not yet been garbage collected. Go calls this inuse_space. This is useful for investigating the overall memory usage of your service and identifying potential memory leaks.
Mutex
The time functions have been waiting on mutexes during the profiling period (default: 60s). The stack traces in this profile point the Unlock() operation that allowed another goroutine blocked on the mutex to proceed. Short mutex contentions using spinlocks are not captured by this profile, but can be seen in the CPU profile. See also the note about how this measure changes in version 1.33.0 in Delta profiles.
Block
The time functions have been waiting on mutexes and channel operations during the profiling period (default: 60s). Sleep, GC, Network, and Syscall operations are not captured by this profile. Blocking operations are only captured after they become unblocked, so this profile cannot be used to debug applications that appear to be stuck. For mutex contentions, the stack traces in this profile point to blocked Lock() operations. This tells you where your program is getting blocked, while the mutex profile tells you what part of your program is causing the contention. See Datadog’s Block Profiling in Go research for more in-depth information. See also the note about how this measure changes in version 1.33.0 in Delta profiles. Note: The block profiler can cause noticeable overhead for production workloads. If enabling it in production, prefer high rates (such as 100000000, which is 100 milliseconds) and look for signs of increased latency or CPU utilization.
Goroutines
A snapshot of the number of goroutines currently executing the same functions (both on-CPU and waiting off-CPU). An increasing number of goroutines between snapshots can indicate that the program is leaking goroutines. In most healthy applications this profile is dominated by worker pools and the number of goroutines they use. Applications that are extremely latency-sensitive and use a large number of goroutines (> 10.000) should be aware that enabling this profile requires stop-the-world pauses. The pauses occur only once every profiling period (default 60s) and normally last for around 1µsec per goroutine. Typical applications with a p99 latency SLO of around 100ms can generally ignore this warning. See Datadog’s Goroutine Profiling in Go research for more in-depth information.

Delta profiles

Note: In Go profiler versions before 1.33.0, Allocations, Allocated Memory, Mutex, and Block metrics are shown as measures accumulated since the process was started, as opposed to during the profiling period. The change to delta profiles in version 1.33.0 lets you see how these measures are changing instead of accumulating. Delta profiling is on by default. Profiler version 1.35.0 allows you to disable delta profiles using the WithDeltaProfiles option.

As of profiler version 1.37.0, accumulated profiles are no longer uploaded when delta profiling is enabled to reduce upload bandwidth usage. Contact Support to discuss your use case if you rely on the full accumulated profiles.

Further Reading

PREVIEWING: dgreen15/renaming-self-service-actions