< prev index next >
test/jdk/jdk/internal/platform/docker/MetricsMemoryTester.java
Print this page
@ rev 57734 : Review feedback
|
o rev 57733 : 8231111: Cgroups v2: Rework Metrics in java.base so as to recognize unified hierarchy
| Reviewed-by: bobv, mchung
~
*** 1,7 ****
/*
! * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,7 ----
/*
! * Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 21,30 ****
--- 21,31 ----
* questions.
*/
import java.util.Arrays;
import jdk.internal.platform.Metrics;
+ import jdk.internal.platform.MetricsCgroupV1;
public class MetricsMemoryTester {
public static void main(String[] args) {
System.out.println(Arrays.toString(args));
switch (args[0]) {
*** 63,84 ****
--- 64,93 ----
private static void testMemoryFailCount() {
long count = Metrics.systemMetrics().getMemoryFailCount();
// Allocate 512M of data
byte[][] bytes = new byte[64][];
+ boolean atLeastOneAllocationWorked = false;
for (int i = 0; i < 64; i++) {
try {
bytes[i] = new byte[8 * 1024 * 1024];
+ atLeastOneAllocationWorked = true;
// Break out as soon as we see an increase in failcount
// to avoid getting killed by the OOM killer.
if (Metrics.systemMetrics().getMemoryFailCount() > count) {
break;
}
} catch (Error e) { // OOM error
break;
}
}
+ if (!atLeastOneAllocationWorked) {
+ System.out.println("Allocation failed immediately. Ignoring test!");
+ return;
+ }
+ // Be sure bytes allocations don't get optimized out
+ System.out.println("DEBUG: Bytes allocation length 1: " + bytes[0].length);
if (Metrics.systemMetrics().getMemoryFailCount() <= count) {
throw new RuntimeException("Memory fail count : new : ["
+ Metrics.systemMetrics().getMemoryFailCount() + "]"
+ ", old : [" + count + "]");
}
*** 97,114 ****
}
System.out.println("TEST PASSED!!!");
}
private static void testKernelMemoryLimit(String value) {
long limit = getMemoryValue(value);
! long kmemlimit = Metrics.systemMetrics().getKernelMemoryLimit();
if (kmemlimit != 0 && limit != kmemlimit) {
throw new RuntimeException("Kernel Memory limit not equal, expected : ["
+ limit + "]" + ", got : ["
+ kmemlimit + "]");
}
! System.out.println("TEST PASSED!!!");
}
private static void testMemoryAndSwapLimit(String memory, String memAndSwap) {
long expectedMem = getMemoryValue(memory);
long expectedMemAndSwap = getMemoryValue(memAndSwap);
--- 106,129 ----
}
System.out.println("TEST PASSED!!!");
}
private static void testKernelMemoryLimit(String value) {
+ Metrics m = Metrics.systemMetrics();
+ if (m instanceof MetricsCgroupV1) {
+ MetricsCgroupV1 mCgroupV1 = (MetricsCgroupV1)m;
+ System.out.println("TEST PASSED!!!");
long limit = getMemoryValue(value);
! long kmemlimit = mCgroupV1.getKernelMemoryLimit();
if (kmemlimit != 0 && limit != kmemlimit) {
throw new RuntimeException("Kernel Memory limit not equal, expected : ["
+ limit + "]" + ", got : ["
+ kmemlimit + "]");
}
! } else {
! throw new RuntimeException("oomKillFlag test not supported for cgroups v2");
! }
}
private static void testMemoryAndSwapLimit(String memory, String memAndSwap) {
long expectedMem = getMemoryValue(memory);
long expectedMemAndSwap = getMemoryValue(memAndSwap);
*** 136,146 ****
}
return result;
}
private static void testOomKillFlag(boolean oomKillFlag) {
! if (!(oomKillFlag ^ Metrics.systemMetrics().isMemoryOOMKillEnabled())) {
throw new RuntimeException("oomKillFlag error");
}
System.out.println("TEST PASSED!!!");
}
}
--- 151,169 ----
}
return result;
}
private static void testOomKillFlag(boolean oomKillFlag) {
! Metrics m = Metrics.systemMetrics();
! if (m instanceof MetricsCgroupV1) {
! MetricsCgroupV1 mCgroupV1 = (MetricsCgroupV1)m;
! Boolean expected = Boolean.valueOf(oomKillFlag);
! Boolean actual = mCgroupV1.isMemoryOOMKillEnabled();
! if (!(expected.equals(actual))) {
throw new RuntimeException("oomKillFlag error");
}
System.out.println("TEST PASSED!!!");
+ } else {
+ throw new RuntimeException("oomKillFlag test not supported for cgroups v2");
+ }
}
}
< prev index next >