1.19.0
Highlights
Alpha support for Memory Profiling (Allocations and Heap)
As of ddtrace 1.19.0, the Profiler supports three new profile types:
- Allocations
- Heap Live Objects
- Heap Live Size
You can use these to optimize your application to allocate and use less memory, as well as to track down memory leaks.
We're still working on tuning the overhead impact and sampling frequency for these new profile types, and that's why this feature is marked as experimental.
You can enable these features:
- Using the environment variables
DD_PROFILING_EXPERIMENTAL_ALLOCATION_ENABLED=true
,
DD_PROFILING_EXPERIMENTAL_HEAP_ENABLED=true
andDD_PROFILING_EXPERIMENTAL_HEAP_SIZE_ENABLED=true
- Or via code by adding to your
Datadog.configure
block:
Datadog.configure do |c|
# ... existing configuration ...
c.profiling.advanced.experimental_allocation_enabled = true
c.profiling.advanced.experimental_heap_enabled = true
c.profiling.advanced.experimental_heap_size_enabled = true
end
Known issues and limitations:
- This feature only works on Ruby 2.7 and above.
- Ruby versions 3.2.0, 3.2.1 and 3.2.2 are not supported due to a Ruby VM bug. The bug has been fixed upstream and the upcoming Ruby 3.2.3 will be supported.
- This feature is currently incompatible with applications using Ractors due to a Ruby VM bug.
- The three options above are not fully independent;
experimental_heap_size_enabled
requiresexperimental_heap_enabled
,
and in turnexperimental_heap_enabled
requiresexperimental_allocation_enabled
. - We have added experimental tunables for lowering the overhead of these features. For more details, check the documentation for the
experimental_allocation_sample_rate
andexperimental_heap_sample_rate
settings. - The
experimental_allocation_enabled
feature replaces theallocation_counting_enabled
setting, which is now deprecated.
We're very interested in feedback on how this feature works for you. Give it a try, let us know how it's working!
Performance improvements to Garbage Collection Profiling + Timeline view support
The off-by-default Garbage Collection profiling feature has been redesigned to lower its overhead, and to support showing time spent doing Garbage Collection in the Profiler Timeline view.
See #3313 for some nice screenshots of how it looks!
You can enable this feature using the DD_PROFILING_FORCE_ENABLE_GC=true
environment variable, or using the
c.profiling.advanced.force_enable_gc_profiling = true
setting via code.
Added
- Tracing: Add
on_error
settings formysql2
(#3316) - Core: Add install_signature to app-started telemetry event (#3349)
- Profiling: Heap Profiling (#3281) (#3287) (#3328) (#3329) (#3333) (#3360)
- Profiling: Redesign GC profiling to add timeline support and reduce overhead (#3313)
- Core: Use Ruby 3.3 stable for CI testing (#3354)
Changed
- Core: Bump
datadog-ci
dependency to 0.6.0 (#3361) - Core: Bump debase-ruby_core_source dependency to 3.3.1 (#3373)
- Docs: Backport "List Ruby 3.3 as supported in the docs" to master branch (#3374)
- Profiling: Import upstream
rb_profile_frames
fix (#3352) - Profiling: Allow the dynamic sampling rate overhead target to be set (#3310)
- Profiling: Split profiling tests into ractor and non-ractor suites. (#3320)
Fixed
- Docs: Fix
pg
doc markdown format (#3317) - Tracing: Fix recursive
require
in Railtie (#3365) - Profiling: Fix issues stemming from rb_gc_force_recycle (#3366)
- Profiling: Fix Ruby 3.3 CI being broken in master due to profiler (#3356)
- Profiling: Fix "no signals" workaround detection when mariadb is in use (#3362)
Read the full changeset and the release milestone.