Skip to content

1.19.0

Compare
Choose a tag to compare
@github-actions github-actions released this 10 Jan 21:14
· 1061 commits to master since this release
ef61baf

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 and DD_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 requires experimental_heap_enabled,
    and in turn experimental_heap_enabled requires experimental_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 and experimental_heap_sample_rate settings.
  • The experimental_allocation_enabled feature replaces the allocation_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 for mysql2 (#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.