8206243: java -XshowSettings fails if memory.limit_in_bytes overflows LONG.max
Reviewed-by: dholmes, bobv
--- a/src/java.base/linux/classes/jdk/internal/platform/cgroupv1/SubSystem.java Thu Jul 05 13:22:44 2018 +0800
+++ b/src/java.base/linux/classes/jdk/internal/platform/cgroupv1/SubSystem.java Thu Jul 05 11:56:19 2018 +0200
@@ -27,6 +27,7 @@
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;
@@ -100,11 +101,20 @@
public static long getLongValue(SubSystem subsystem, String parm) {
String strval = getStringValue(subsystem, parm);
+ long retval = 0;
if (strval == null) return 0L;
- long retval = Long.parseLong(strval);
-
+ try {
+ retval = Long.parseLong(strval);
+ } catch (NumberFormatException e) {
+ // For some properties (e.g. memory.limit_in_bytes) we may overflow the range of signed long.
+ // In this case, return Long.max
+ BigInteger b = new BigInteger(strval);
+ if (b.compareTo(BigInteger.valueOf(Long.MAX_VALUE)) > 0) {
+ return Long.MAX_VALUE;
+ }
+ }
return retval;
}