-
Bug
-
Resolution: Fixed
-
P4
-
21.0.5
-
b02
-
x86_64
-
linux
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8347251 | 24.0.1 | Fabian Meumertzheim | P4 | Resolved | Fixed | b02 |
JDK-8348845 | 21.0.8-oracle | Kevin Walls | P4 | Resolved | Fixed | master |
JDK-8347276 | 21.0.7 | Fabian Meumertzheim | P4 | Resolved | Fixed | b01 |
Linux
A DESCRIPTION OF THE PROBLEM :
Occassionally, calls to com.sun.management.OperatingSystemMXBean.getSystemCpuLoad() throw an NPE:
java.lang.NullPointerException: Cannot read the array length because the return value of "jdk.internal.platform.Metrics.getCpuSetCpus()" is null
at jdk.management/com.sun.management.internal.OperatingSystemImpl.isCpuSetSameAsHostCpuSet(Unknown Source)
at jdk.management/com.sun.management.internal.OperatingSystemImpl$ContainerCpuTicks.getContainerCpuLoad(Unknown Source)
at jdk.management/com.sun.management.internal.OperatingSystemImpl.getCpuLoad(Unknown Source)
at jdk.management/com.sun.management.OperatingSystemMXBean.getSystemCpuLoad(Unknown Source)
...
This appears to be caused by a TOCTOU (time of check, time of use) issue with a null check at https://github.com/openjdk/jdk/blob/16ef6e2a187181f49b7b2d601c660bbd25ab3845/src/jdk.management/unix/classes/com/sun/management/internal/OperatingSystemImpl.java#L277-L278.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
This issue is flaky and there is no clear reproducer. The exception has been observed running the build system Bazel in a container setup in CI (https://github.com/bazelbuild/bazel/issues/24519).
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Method does not throw any exceptions.
ACTUAL -
Method throws:
java.lang.NullPointerException: Cannot read the array length because the return value of "jdk.internal.platform.Metrics.getCpuSetCpus()" is null
at jdk.management/com.sun.management.internal.OperatingSystemImpl.isCpuSetSameAsHostCpuSet(Unknown Source)
at jdk.management/com.sun.management.internal.OperatingSystemImpl$ContainerCpuTicks.getContainerCpuLoad(Unknown Source)
at jdk.management/com.sun.management.internal.OperatingSystemImpl.getCpuLoad(Unknown Source)
at jdk.management/com.sun.management.OperatingSystemMXBean.getSystemCpuLoad(Unknown Source)
...
This appears to be
CUSTOMER SUBMITTED WORKAROUND :
Catching any NPEs thrown by the method.
FREQUENCY : occasionally
- backported by
-
JDK-8347251 OperatingSystemMXBean.getSystemCpuLoad() throws NPE
-
- Resolved
-
-
JDK-8347276 OperatingSystemMXBean.getSystemCpuLoad() throws NPE
-
- Resolved
-
-
JDK-8348845 OperatingSystemMXBean.getSystemCpuLoad() throws NPE
-
- Resolved
-
- links to
-
Commit(master) openjdk/jdk21u-dev/f117cb06
-
Commit(master) openjdk/jdk24u/8c455fda
-
Commit(master) openjdk/jdk/d7ef3ac0
-
Review(master) openjdk/jdk21u-dev/1211
-
Review(master) openjdk/jdk24u/4
-
Review(master) openjdk/jdk/22611