RFR: Container Fixes (8219652, 8217766, 8212528)
bob.vandette at oracle.com
Mon Mar 11 15:13:16 UTC 2019
Please review these three fixes for Linux Docker/cgroup container support.
https://bugs.openjdk.java.net/browse/JDK-8219562 - Line of code in osContainer_linux.cpp#L102 appears unreachable
This change corrects a rarely used hotspot code path to be compatible with the Java based Metrics.
https://bugs.openjdk.java.net/browse/JDK-8212528 - Wrong cgroup subsystem being used for some CPU Container Metrics
Most Linux distros provide symbolic links for cpuacct and cpu controller directories. Docker on the Mac does not.
This causes some of the cpu statistics to be unreported.
https://bugs.openjdk.java.net/browse/JDK-8217766 - Container Support doesn't work for some Join Controllers combinations
The cgroup identification -implemented by parsing /proc/self/mountinfo
and /proc/self/cgroup- assumed each cgroup controller was mounted
disjoint from the others (except for "cpu" and "cpuacct" controllers).
Which means, we expected one single controller per mountinfo line.
This matches the way most Linux distributions currently configure
cgroupsv1 by default. Yet controllers can be grouped arbitrarily.
For instance, using the JoinControllers systemd directive.
One use case for that is to let Kubernetes' kubelet discover his own
dedicated and reserved cgroup hierarchy. In that situation, the JVM
fails to discover the expected cgroup controllers set, and, when running
containerized, default to a suboptimal understanding of available resources.
Supporting arbitrarily controllers groups per mountpoint actually
allows for simpler and easier to follow code, as we don't need nested
if/else for every controller.
This fix also updates the Containers Metrics, to support joint controllers.
More information about the core-libs-dev