提交 6ca2973a 编写于 作者: S stefank

7196801: NPG: Fix java/lang/management/MemoryMXBean/LowMemoryTest2

Reviewed-by: coleenp, sla
Contributed-by: stefan.karlsson@oracle.com, coleen.phillimore@oracle.com
上级 22468b4a
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
* *
* The test set a listener to be notified when any of the non-heap pools * The test set a listener to be notified when any of the non-heap pools
* exceed 80%. It then starts a thread that continuously loads classes. * exceed 80%. It then starts a thread that continuously loads classes.
* In the HotSpot implementation this causes perm space to be consumed. * In the HotSpot implementation this causes metaspace to be consumed.
* Test completes when we the notification is received or an OutOfMemory * Test completes when we the notification is received or an OutOfMemory
* is generated. * is generated.
*/ */
...@@ -100,7 +100,14 @@ public class LowMemoryTest2 { ...@@ -100,7 +100,14 @@ public class LowMemoryTest2 {
// TestNNNNNN // TestNNNNNN
String name = "Test" + Integer.toString(count++); int load_count = count++;
if (load_count > 999999) {
// The test will create a corrupt class file if the count
// exceeds 999999. Fix the test if this exception is thrown.
throw new RuntimeException("Load count exceeded");
}
String name = "Test" + Integer.toString(load_count);
byte value[]; byte value[];
try { try {
...@@ -133,8 +140,9 @@ public class LowMemoryTest2 { ...@@ -133,8 +140,9 @@ public class LowMemoryTest2 {
* Note: Once the usage threshold has been exceeded the low memory * Note: Once the usage threshold has been exceeded the low memory
* detector thread will attempt to deliver its notification - this can * detector thread will attempt to deliver its notification - this can
* potentially create a race condition with this thread contining to * potentially create a race condition with this thread contining to
* fill up perm space. To avoid the low memory detector getting an OutOfMemory * fill up metaspace. To avoid the low memory detector getting an
* we throttle this thread once the threshold has been exceeded. * OutOfMemory we throttle this thread once the threshold has been
* exceeded.
*/ */
public void run() { public void run() {
List pools = ManagementFactory.getMemoryPoolMXBeans(); List pools = ManagementFactory.getMemoryPoolMXBeans();
...@@ -180,7 +188,7 @@ public class LowMemoryTest2 { ...@@ -180,7 +188,7 @@ public class LowMemoryTest2 {
// Set threshold of 80% of all NON_HEAP memory pools // Set threshold of 80% of all NON_HEAP memory pools
// In the Hotspot implementation this means we should get a notification // In the Hotspot implementation this means we should get a notification
// if the CodeCache or perm generation fills up. // if the CodeCache or metaspace fills up.
while (iter.hasNext()) { while (iter.hasNext()) {
MemoryPoolMXBean p = (MemoryPoolMXBean) iter.next(); MemoryPoolMXBean p = (MemoryPoolMXBean) iter.next();
...@@ -188,7 +196,12 @@ public class LowMemoryTest2 { ...@@ -188,7 +196,12 @@ public class LowMemoryTest2 {
// set threshold // set threshold
MemoryUsage mu = p.getUsage(); MemoryUsage mu = p.getUsage();
long threshold = (mu.getMax() * 80) / 100; long max = mu.getMax();
if (max < 0) {
throw new RuntimeException("There is no maximum set for "
+ p.getName() + " memory pool so the test is invalid");
}
long threshold = (max * 80) / 100;
p.setUsageThreshold(threshold); p.setUsageThreshold(threshold);
......
...@@ -51,14 +51,17 @@ go() { ...@@ -51,14 +51,17 @@ go() {
# Run test with each GC configuration # Run test with each GC configuration
# #
# Notes: To ensure that perm gen fills up we disable class unloading. # Notes: To ensure that metaspace fills up we disable class unloading.
# Also we set the max perm space to 8MB - otherwise the test takes too # Also we set the max metaspace to 8MB - otherwise the test takes too
# long to run. # long to run.
go -noclassgc -XX:PermSize=8m -XX:MaxPermSize=8m -XX:+UseSerialGC LowMemoryTest2 go -noclassgc -XX:MaxMetaspaceSize=16m -XX:+UseSerialGC LowMemoryTest2
go -noclassgc -XX:PermSize=8m -XX:MaxPermSize=8m -XX:+UseParallelGC LowMemoryTest2 go -noclassgc -XX:MaxMetaspaceSize=16m -XX:+UseParallelGC LowMemoryTest2
go -noclassgc -XX:PermSize=8m -XX:MaxPermSize=8m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC \ go -noclassgc -XX:MaxMetaspaceSize=16m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC LowMemoryTest2
LowMemoryTest2
# Test class metaspace - might hit MaxMetaspaceSize instead if
# UseCompressedClassPointers is off or if 32 bit.
go -noclassgc -XX:MaxMetaspaceSize=16m -XX:CompressedClassSpaceSize=4m LowMemoryTest2
echo '' echo ''
if [ $failures -gt 0 ]; if [ $failures -gt 0 ];
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册