mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 14:54:52 +02:00
8293540: [Metrics] Incorrectly detected resource limits with additional cgroup fs mounts
Reviewed-by: iklam
This commit is contained in:
parent
6974978869
commit
6d83482a6b
6 changed files with 158 additions and 38 deletions
|
@ -318,30 +318,11 @@ public class CgroupSubsystemFactory {
|
|||
case MEMORY_CTRL: // fall-through
|
||||
case CPU_CTRL:
|
||||
case CPUACCT_CTRL:
|
||||
case CPUSET_CTRL:
|
||||
case PIDS_CTRL:
|
||||
case BLKIO_CTRL: {
|
||||
CgroupInfo info = infos.get(controllerName);
|
||||
assert info.getMountPoint() == null;
|
||||
assert info.getMountRoot() == null;
|
||||
info.setMountPoint(mountPath);
|
||||
info.setMountRoot(mountRoot);
|
||||
cgroupv1ControllerFound = true;
|
||||
break;
|
||||
}
|
||||
case CPUSET_CTRL: {
|
||||
CgroupInfo info = infos.get(controllerName);
|
||||
if (info.getMountPoint() != null) {
|
||||
// On some systems duplicate cpuset controllers get mounted in addition to
|
||||
// the main cgroup controllers most likely under /sys/fs/cgroup. In that
|
||||
// case pick the one under /sys/fs/cgroup and discard others.
|
||||
if (!info.getMountPoint().startsWith("/sys/fs/cgroup")) {
|
||||
info.setMountPoint(mountPath);
|
||||
info.setMountRoot(mountRoot);
|
||||
}
|
||||
} else {
|
||||
info.setMountPoint(mountPath);
|
||||
info.setMountRoot(mountRoot);
|
||||
}
|
||||
setMountPoints(info, mountPath, mountRoot);
|
||||
cgroupv1ControllerFound = true;
|
||||
break;
|
||||
}
|
||||
|
@ -355,10 +336,7 @@ public class CgroupSubsystemFactory {
|
|||
// All controllers have the same mount point and root mount
|
||||
// for unified hierarchy.
|
||||
for (CgroupInfo info: infos.values()) {
|
||||
assert info.getMountPoint() == null;
|
||||
assert info.getMountRoot() == null;
|
||||
info.setMountPoint(mountPath);
|
||||
info.setMountRoot(mountRoot);
|
||||
setMountPoints(info, mountPath, mountRoot);
|
||||
}
|
||||
}
|
||||
cgroupv2ControllerFound = true;
|
||||
|
@ -367,6 +345,22 @@ public class CgroupSubsystemFactory {
|
|||
return cgroupv1ControllerFound || cgroupv2ControllerFound;
|
||||
}
|
||||
|
||||
private static void setMountPoints(CgroupInfo info, String mountPath, String mountRoot) {
|
||||
if (info.getMountPoint() != null) {
|
||||
// On some systems duplicate controllers get mounted in addition to
|
||||
// the main cgroup controllers (which are under /sys/fs/cgroup). In that
|
||||
// case pick the main one and discard others as the limits
|
||||
// are associated with the ones in /sys/fs/cgroup.
|
||||
if (!info.getMountPoint().startsWith("/sys/fs/cgroup")) {
|
||||
info.setMountPoint(mountPath);
|
||||
info.setMountRoot(mountRoot);
|
||||
}
|
||||
} else {
|
||||
info.setMountPoint(mountPath);
|
||||
info.setMountRoot(mountRoot);
|
||||
}
|
||||
}
|
||||
|
||||
public static final class CgroupTypeResult {
|
||||
private final boolean isCgroupV2;
|
||||
private final boolean anyControllersEnabled;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue