dd_oome_notifier.sh and dd_crash_uploader.sh fail when JDK_JAVA_OPTIONS contains JMX or other port-binding flags
メンテナーはふだん 2 日以内に返信
@jbachorik がすでに取り組んでいます。
2026年3月12日 から。
評価
この issue はまだ評価されていません。
説明
Tracer Version(s)
1.55.0
Java Version(s)
21.0.9
JVM Vendor
Eclipse Adoptium / Temurin
Bug Report
The dd_oome_notifier.sh (and dd_crash_uploader.sh) scripts spawned via -XX:OnOutOfMemoryError do not unset JDK_JAVA_OPTIONS, JAVA_TOOL_OPTIONS, or _JAVA_OPTIONS before launching a child java process. The child JVM therefore inherits the full application JVM configuration, which causes three distinct problems:
- Port conflicts — flags like JMX remote (
-Dcom.sun.management.jmxremote.port=9012) causeBindExceptionbecause the parent JVM still holds the port - cgroup OOMKill — memory flags like
-Xms/-Xmxor-XX:MaxRAMPercentage=90cause the child JVM to compete with the still-alive parent for container memory, potentially triggering a kernel OOMKill - Lost OOM diagnostics — when the script fails for any of the above reasons, no OOME event reaches Datadog, and the original OOM exception details (stack trace, thread name) are also lost because
-XX:+ExitOnOutOfMemoryErrorforce-terminates after the handler runs
Actual output:
# java.lang.OutOfMemoryError: Metaspace
# -XX:OnOutOfMemoryError="/tmp/datadog/java/dd_oome_notifier.sh %p"
# Executing /bin/sh -c "/tmp/datadog/java/dd_oome_notifier.sh 1"...
Agent Jar: /opt/datadog/apm/library/java/dd-java-agent.jar
Tags: host:order-664fc65797-2bclc,...
JAVA_HOME: /opt/java/openjdk
PID: 1
NOTE: Picked up JDK_JAVA_OPTIONS: -XX:MaxGCPauseMillis=4000 -XX:MinRAMPercentage=25 -XX:MaxRAMPercentage=90 -XX:MaxMetaspaceSize=128m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9012 -Dcom.sun.management.jmxremote.rmi.port=9012 ...
Picked up JAVA_TOOL_OPTIONS: -javaagent:/opt/datadog/apm/library/java/dd-java-agent.jar ...
Caused by: java.rmi.server.ExportException: Port already in use: 9012; nested exception is:
java.net.BindException: Address already in use
...
Error: Failed to generate OOME event
Terminating due to java.lang.OutOfMemoryError: Metaspace
Expected Behavior
The OOME event should be sent to Datadog successfully, regardless of what JDK_JAVA_OPTIONS or JAVA_TOOL_OPTIONS contain. When the script fails, the original OOM exception details (stack trace, thread name) should still be visible in the application logs.
Reproduction Code
-
Configure a JVM application with JMX remote monitoring via
JDK_JAVA_OPTIONS:JDK_JAVA_OPTIONS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9012 -Dcom.sun.management.jmxremote.rmi.port=9012 ... -
Have dd-java-agent injected (e.g. via Admission Controller), which sets:
JAVA_TOOL_OPTIONS=-javaagent:/opt/datadog/apm/library/java/dd-java-agent.jar -XX:OnOutOfMemoryError="/tmp/datadog/java/dd_oome_notifier.sh %p" -
Trigger an
OutOfMemoryError(in our case:java.lang.OutOfMemoryError: Metaspace) -
The JVM invokes
dd_oome_notifier.sh, which spawns a child java process:"$config_java_home/bin/java" -Ddd.dogstatsd.start-delay=0 -jar "$config_agent" sendOomeEvent "$config_tags" -
This child process inherits
JDK_JAVA_OPTIONS(including JMX port flags) andJAVA_TOOL_OPTIONS(including the agent jar) from the environment. -
The child JVM tries to bind JMX to port 9012, which is still held by the dying parent JVM →
BindException: Address already in use→ "Error: Failed to generate OOME event"
- 主要言語
- Java
- スター
- 736
- フォーク
- 364
- 平均マージ
- 3日 13時間
- マージ済み PR(30日)
- 213
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
DataDog/dd-trace-java のほかの issue
-
type: bug report
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
DataDog/dd-trace-java#12818 ·
メンテナーはふだん 2 日以内に返信
-
Update DEFAULT_HTTP_CLIENT_ERROR_STATUSES to include 5xx status codes再び着手できるかも このイシューのプルリクエストはマージされずにクローズされました。 オープンtype: feature request
難易度 1/5 1〜3時間 初心者へのやさしさ 70/100
DataDog/dd-trace-java#10245 · コメント 1 件 ·
メンテナーはふだん 2 日以内に返信
-
Startup ~2x slower with AOT class linking: agent retransforms ~22k preloaded classes (JDK 25, 1.67.0)対応中かも @mcculls が 1 日前に担当しました。 オープンtype: bug report
DataDog/dd-trace-java#12795 · 担当者 1 名 ·
メンテナーはふだん 2 日以内に返信
-
gRPC server instrumentations (grpc-1.5, armeria-grpc) don't make extracted W3C baggage current in the handler対応中かも @mcculls が 11 日前に担当しました。 オープンcomp: context propagation inst: grpc type: feature request
難易度 3/5 1〜2日 初心者へのやさしさ 78/100
DataDog/dd-trace-java#12654 · 担当者 1 名 ·
メンテナーはふだん 2 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 62/100
DataDog/dd-trace-java#12608 ·
メンテナーはふだん 2 日以内に返信
DataDog/dd-trace-java の issue をすべて見る
似ている issue
-
`Processing lsp` never exits and leaves orphaned processes対応中かも @overcast302 が今日担当しました。 オープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
processing/processing4#1578 · コメント 1 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 60/100
メンテナーはふだん 1 日以内に返信
-
[BUG] S3 CORS responses omit Access-Control-Allow-Credentials for matched origins対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
floci-io/floci#5369 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
securityHeaders replaces a route's own Content-Security-Policy (0.9.9; weakens embedders' pages)オープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
sqlcipher/sqlcipher-android#97 · コメント 1 件 ·