Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

8253877: gc/g1/TestGCLogMessages.java fails - missing "Evacuation failure" message #624

Closed
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
27 changes: 18 additions & 9 deletions test/hotspot/jtreg/gc/g1/TestGCLogMessages.java
Expand Up @@ -39,6 +39,7 @@
*/

import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.Platform;
import jdk.test.lib.process.ProcessTools;
import sun.hotspot.code.Compiler;

Expand Down Expand Up @@ -182,7 +183,9 @@ void checkMessagesAtLevel(OutputAnalyzer output, LogMessageWithLevel messages[],
public static void main(String[] args) throws Exception {
new TestGCLogMessages().testNormalLogs();
new TestGCLogMessages().testConcurrentRefinementLogs();
new TestGCLogMessages().testWithToSpaceExhaustionLogs();
if (Platform.isDebugBuild()) {
new TestGCLogMessages().testWithEvacuationFailureLogs();
}
new TestGCLogMessages().testWithConcurrentStart();
new TestGCLogMessages().testExpandHeap();
}
Expand Down Expand Up @@ -240,12 +243,15 @@ private void testConcurrentRefinementLogs() throws Exception {
new LogMessageWithLevel("Remove Self Forwards", Level.TRACE),
};

private void testWithToSpaceExhaustionLogs() throws Exception {
private void testWithEvacuationFailureLogs() throws Exception {
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC",
"-Xmx32M",
"-Xmn16M",
"-XX:+G1EvacuationFailureALot",
"-XX:G1EvacuationFailureALotCount=100",
"-XX:G1EvacuationFailureALotInterval=1",
"-Xlog:gc+phases=debug",
GCTestWithToSpaceExhaustion.class.getName());
GCTestWithEvacuationFailure.class.getName());

OutputAnalyzer output = new OutputAnalyzer(pb.start());
checkMessagesAtLevel(output, exhFailureMessages, Level.DEBUG);
Expand All @@ -255,7 +261,7 @@ private void testWithToSpaceExhaustionLogs() throws Exception {
"-Xmx32M",
"-Xmn16M",
"-Xlog:gc+phases=trace",
GCTestWithToSpaceExhaustion.class.getName());
GCTestWithEvacuationFailure.class.getName());

output = new OutputAnalyzer(pb.start());
checkMessagesAtLevel(output, exhFailureMessages, Level.TRACE);
Expand Down Expand Up @@ -304,16 +310,19 @@ public static void main(String [] args) {
}
}

static class GCTestWithToSpaceExhaustion {
static class GCTestWithEvacuationFailure {
private static byte[] garbage;
private static byte[] largeObject;
private static Object[] holder = new Object[200]; // Must be larger than G1EvacuationFailureALotCount

public static void main(String [] args) {
largeObject = new byte[16*1024*1024];
System.out.println("Creating garbage");
// create 128MB of garbage. This should result in at least one GC,
// some of them with to-space exhaustion.
for (int i = 0; i < 1024; i++) {
garbage = new byte[128 * 1024];
// Create 16 MB of garbage. This should result in at least one GC,
// (Heap size is 32M, we use 17MB for the large object above)
// which is larger than G1EvacuationFailureALotInterval.
for (int i = 0; i < 16 * 1024; i++) {
holder[i % holder.length] = new byte[1024];
}
System.out.println("Done");
}
Expand Down