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. Bob.