28 import java.io.IOException;
29 import java.nio.file.Paths;
30 import java.util.HashMap;
31 import java.util.List;
32 import java.util.Map;
33 import java.util.stream.Collectors;
34 import java.util.stream.Stream;
35
36 import jdk.internal.platform.cgroupv1.CgroupV1Subsystem;
37 import jdk.internal.platform.cgroupv2.CgroupV2Subsystem;
38 import jdk.internal.platform.cgroupv2.CgroupV2SubsystemController;
39
40 class CgroupSubsystemFactory {
41
42 private static final String CPU_CTRL = "cpu";
43 private static final String CPUACCT_CTRL = "cpuacct";
44 private static final String CPUSET_CTRL = "cpuset";
45 private static final String BLKIO_CTRL = "blkio";
46 private static final String MEMORY_CTRL = "memory";
47
48 static CgroupSubsystem create() {
49 Map<String, CgroupInfo> infos = new HashMap<>();
50 try {
51 List<String> lines = CgroupUtil.readAllLinesPrivileged(Paths.get("/proc/cgroups"));
52 for (String line : lines) {
53 if (line.startsWith("#")) {
54 continue;
55 }
56 CgroupInfo info = CgroupInfo.fromCgroupsLine(line);
57 switch (info.getName()) {
58 case CPU_CTRL: infos.put(CPU_CTRL, info); break;
59 case CPUACCT_CTRL: infos.put(CPUACCT_CTRL, info); break;
60 case CPUSET_CTRL: infos.put(CPUSET_CTRL, info); break;
61 case MEMORY_CTRL: infos.put(MEMORY_CTRL, info); break;
62 case BLKIO_CTRL: infos.put(BLKIO_CTRL, info); break;
63 }
64 }
65 } catch (IOException e) {
66 return null;
67 }
68
107 try {
108 List<String> lines = CgroupUtil.readAllLinesPrivileged(Paths.get("/proc/self/cgroup"));
109 for (String line: lines) {
110 String[] tokens = line.split(":");
111 if (tokens.length != 3) {
112 return null; // something is not right.
113 }
114 if (!Integer.valueOf(0).toString().equals(tokens[0])) {
115 // hierarchy must be zero for cgroups v2
116 return null;
117 }
118 cgroupPath = tokens[2];
119 break;
120 }
121 } catch (IOException e) {
122 return null;
123 }
124 CgroupSubsystemController unified = new CgroupV2SubsystemController(
125 mountPath,
126 cgroupPath);
127 return new CgroupV2Subsystem(unified);
128 } else {
129 return CgroupV1Subsystem.getInstance();
130 }
131 }
132 }
|
28 import java.io.IOException;
29 import java.nio.file.Paths;
30 import java.util.HashMap;
31 import java.util.List;
32 import java.util.Map;
33 import java.util.stream.Collectors;
34 import java.util.stream.Stream;
35
36 import jdk.internal.platform.cgroupv1.CgroupV1Subsystem;
37 import jdk.internal.platform.cgroupv2.CgroupV2Subsystem;
38 import jdk.internal.platform.cgroupv2.CgroupV2SubsystemController;
39
40 class CgroupSubsystemFactory {
41
42 private static final String CPU_CTRL = "cpu";
43 private static final String CPUACCT_CTRL = "cpuacct";
44 private static final String CPUSET_CTRL = "cpuset";
45 private static final String BLKIO_CTRL = "blkio";
46 private static final String MEMORY_CTRL = "memory";
47
48 static CgroupMetrics create() {
49 Map<String, CgroupInfo> infos = new HashMap<>();
50 try {
51 List<String> lines = CgroupUtil.readAllLinesPrivileged(Paths.get("/proc/cgroups"));
52 for (String line : lines) {
53 if (line.startsWith("#")) {
54 continue;
55 }
56 CgroupInfo info = CgroupInfo.fromCgroupsLine(line);
57 switch (info.getName()) {
58 case CPU_CTRL: infos.put(CPU_CTRL, info); break;
59 case CPUACCT_CTRL: infos.put(CPUACCT_CTRL, info); break;
60 case CPUSET_CTRL: infos.put(CPUSET_CTRL, info); break;
61 case MEMORY_CTRL: infos.put(MEMORY_CTRL, info); break;
62 case BLKIO_CTRL: infos.put(BLKIO_CTRL, info); break;
63 }
64 }
65 } catch (IOException e) {
66 return null;
67 }
68
107 try {
108 List<String> lines = CgroupUtil.readAllLinesPrivileged(Paths.get("/proc/self/cgroup"));
109 for (String line: lines) {
110 String[] tokens = line.split(":");
111 if (tokens.length != 3) {
112 return null; // something is not right.
113 }
114 if (!Integer.valueOf(0).toString().equals(tokens[0])) {
115 // hierarchy must be zero for cgroups v2
116 return null;
117 }
118 cgroupPath = tokens[2];
119 break;
120 }
121 } catch (IOException e) {
122 return null;
123 }
124 CgroupSubsystemController unified = new CgroupV2SubsystemController(
125 mountPath,
126 cgroupPath);
127 return new CgroupMetrics(new CgroupV2Subsystem(unified));
128 } else {
129 return new CgroupV1Metrics(CgroupV1Subsystem.getInstance());
130 }
131 }
132 }
|