< prev index next >
src/java.base/linux/classes/jdk/internal/platform/cgroupv1/SubSystem.java
Print this page
@ rev 54202 : 8217338: [Containers] Improve systemd slice memory limit support
| Summary: Use hierachical memory limit in addition to memory_limits_in_bytes
~ Reviewed-by: duke
@@ -27,14 +27,15 @@
import java.io.BufferedReader;
import java.io.IOException;
import java.math.BigInteger;
import java.nio.file.Files;
-import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
+import java.util.List;
import java.util.Optional;
+import java.util.function.Function;
import java.util.stream.Stream;
public class SubSystem {
String root;
String mountPoint;
@@ -97,14 +98,36 @@
return null;
}
}
+ public static long getLongValueMatchingLine(SubSystem subsystem,
+ String param,
+ String match,
+ Function<String, Long> conversion) {
+ long retval = Metrics.unlimited_minimum + 1; // default unlimited
+ try {
+ List<String> lines = Files.readAllLines(Paths.get(subsystem.path(), param));
+ for (String line: lines) {
+ if (line.contains(match)) {
+ retval = conversion.apply(line);
+ break;
+ }
+ }
+ } catch (IOException e) {
+ // Ignore. Default is unlimited.
+ }
+ return retval;
+ }
+
public static long getLongValue(SubSystem subsystem, String parm) {
String strval = getStringValue(subsystem, parm);
- long retval = 0;
+ return convertStringToLong(strval);
+ }
+ public static long convertStringToLong(String strval) {
+ long retval = 0;
if (strval == null) return 0L;
try {
retval = Long.parseLong(strval);
} catch (NumberFormatException e) {
@@ -213,6 +236,24 @@
ints[i++] = n;
}
return ints;
}
+
+ public static class MemorySubSystem extends SubSystem {
+
+ private boolean hierarchical;
+
+ public MemorySubSystem(String root, String mountPoint) {
+ super(root, mountPoint);
+ }
+
+ boolean isHierarchical() {
+ return hierarchical;
+ }
+
+ void setHierarchical(boolean hierarchical) {
+ this.hierarchical = hierarchical;
+ }
+
+ }
}
< prev index next >