Skip to content

Start profilers synchronously within tracer initialization #5906

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

szegedi
Copy link
Contributor

@szegedi szegedi commented Jun 17, 2025

What does this PR do?

Start profilers synchronously within tracer initialization.

Motivation

Profiler was started asynchronously because of source map loading – it uses async file IO. There are drawbacks to starting the profiler asynchronously though. A minor issue is that it won't start capturing CPU samples for the root program. A larger issue is that any long-lived allocations made after tracer init in the root program also won't ever be shown in the heap live size snapshots. We've had customers complaining about this.

Additional Notes

  • Source maps are still loaded asynchronously. Since they aren't needed until the first time profiles are emitted (65s into the runtime) they should have plenty of time to get loaded.
  • We moved initialization of compression functions (thus, loading of zlib etc.) also out of the synchronous startup path as they, too, are only required first time profiles are emitted.

Copy link

codecov bot commented Jun 17, 2025

Codecov Report

Attention: Patch coverage is 76.00000% with 12 lines in your changes missing coverage. Please review.

Project coverage is 78.93%. Comparing base (ee3f034) to head (f503427).

Files with missing lines Patch % Lines
packages/dd-trace/src/profiling/profiler.js 75.00% 12 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #5906      +/-   ##
==========================================
- Coverage   79.53%   78.93%   -0.60%     
==========================================
  Files         477      416      -61     
  Lines       20390    18499    -1891     
==========================================
- Hits        16217    14603    -1614     
+ Misses       4173     3896     -277     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link

github-actions bot commented Jun 17, 2025

Overall package size

Self size: 9.75 MB
Deduped: 106.26 MB
No deduping: 106.78 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | @datadog/libdatadog | 0.7.0 | 35.02 MB | 35.02 MB | | @datadog/native-appsec | 8.5.2 | 19.33 MB | 19.34 MB | | @datadog/native-iast-taint-tracking | 4.0.0 | 11.72 MB | 11.73 MB | | @datadog/pprof | 5.8.2 | 9.56 MB | 9.93 MB | | @opentelemetry/core | 1.30.1 | 908.66 kB | 7.16 MB | | protobufjs | 7.5.3 | 2.95 MB | 5.6 MB | | @datadog/wasm-js-rewriter | 4.0.1 | 2.85 MB | 3.58 MB | | @datadog/native-metrics | 3.1.1 | 1.02 MB | 1.43 MB | | @opentelemetry/api | 1.8.0 | 1.21 MB | 1.21 MB | | import-in-the-middle | 1.14.0 | 120.58 kB | 841.68 kB | | source-map | 0.7.4 | 226 kB | 226 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | lru-cache | 7.18.3 | 133.92 kB | 133.92 kB | | pprof-format | 2.1.0 | 111.69 kB | 111.69 kB | | @datadog/sketches-js | 2.1.1 | 109.9 kB | 109.9 kB | | lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB | | ignore | 5.3.2 | 53.63 kB | 53.63 kB | | istanbul-lib-coverage | 3.2.2 | 34.37 kB | 34.37 kB | | rfdc | 1.4.1 | 27.15 kB | 27.15 kB | | @isaacs/ttlcache | 1.4.1 | 25.2 kB | 25.2 kB | | dc-polyfill | 0.1.9 | 25.11 kB | 25.11 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | shell-quote | 1.8.2 | 23.54 kB | 23.54 kB | | limiter | 1.1.5 | 23.17 kB | 23.17 kB | | retry | 0.13.1 | 18.85 kB | 18.85 kB | | semifies | 1.0.0 | 15.84 kB | 15.84 kB | | jest-docblock | 29.7.0 | 8.99 kB | 12.76 kB | | crypto-randomuuid | 1.0.0 | 11.18 kB | 11.18 kB | | ttl-set | 1.0.0 | 4.61 kB | 9.69 kB | | mutexify | 1.4.0 | 5.71 kB | 8.74 kB | | path-to-regexp | 0.1.12 | 6.6 kB | 6.6 kB | | koalas | 1.0.2 | 6.47 kB | 6.47 kB | | module-details-from-path | 1.0.4 | 3.96 kB | 3.96 kB |

🤖 This report was automatically generated by heaviest-objects-in-the-universe

@datadog-datadog-prod-us1
Copy link

datadog-datadog-prod-us1 bot commented Jun 17, 2025

Datadog Report

Branch report: szegedi/profiler-sync-start
Commit report: 320aaf4
Test service: dd-trace-js-integration-tests

✅ 0 Failed, 1259 Passed, 0 Skipped, 14m 28.71s Total Time

@szegedi szegedi force-pushed the szegedi/profiler-sync-start branch from 7b483ee to f503427 Compare June 25, 2025 13:03
@pr-commenter
Copy link

pr-commenter bot commented Jun 25, 2025

Benchmarks

Benchmark execution time: 2025-06-25 13:11:15

Comparing candidate commit f503427 in PR branch szegedi/profiler-sync-start with baseline commit ee3f034 in branch master.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 1269 metrics, 54 unstable metrics.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant