8331344: No compiler replay file with CompilerCommand MemLimit
Reviewed-by: kvn, asmehra
This commit is contained in:
parent
a024eed738
commit
389f6fe97c
@ -54,7 +54,7 @@
|
|||||||
ArenaStatCounter::ArenaStatCounter() :
|
ArenaStatCounter::ArenaStatCounter() :
|
||||||
_current(0), _start(0), _peak(0),
|
_current(0), _start(0), _peak(0),
|
||||||
_na(0), _ra(0),
|
_na(0), _ra(0),
|
||||||
_limit(0), _hit_limit(false),
|
_limit(0), _hit_limit(false), _limit_in_process(false),
|
||||||
_na_at_peak(0), _ra_at_peak(0), _live_nodes_at_peak(0)
|
_na_at_peak(0), _ra_at_peak(0), _live_nodes_at_peak(0)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -483,18 +483,23 @@ void CompilationMemoryStatistic::on_arena_change(ssize_t diff, const Arena* aren
|
|||||||
CompilerThread* const th = Thread::current()->as_Compiler_thread();
|
CompilerThread* const th = Thread::current()->as_Compiler_thread();
|
||||||
|
|
||||||
ArenaStatCounter* const arena_stat = th->arena_stat();
|
ArenaStatCounter* const arena_stat = th->arena_stat();
|
||||||
|
if (arena_stat->limit_in_process()) {
|
||||||
|
return; // avoid recursion on limit hit
|
||||||
|
}
|
||||||
|
|
||||||
bool hit_limit_before = arena_stat->hit_limit();
|
bool hit_limit_before = arena_stat->hit_limit();
|
||||||
|
|
||||||
if (arena_stat->account(diff, (int)arena->get_tag())) { // new peak?
|
if (arena_stat->account(diff, (int)arena->get_tag())) { // new peak?
|
||||||
|
|
||||||
// Limit handling
|
// Limit handling
|
||||||
if (arena_stat->hit_limit()) {
|
if (arena_stat->hit_limit()) {
|
||||||
|
|
||||||
char name[1024] = "";
|
char name[1024] = "";
|
||||||
bool print = false;
|
bool print = false;
|
||||||
bool crash = false;
|
bool crash = false;
|
||||||
CompilerType ct = compiler_none;
|
CompilerType ct = compiler_none;
|
||||||
|
|
||||||
|
arena_stat->set_limit_in_process(true); // prevent recursive limit hits
|
||||||
|
|
||||||
// get some more info
|
// get some more info
|
||||||
const CompileTask* const task = th->task();
|
const CompileTask* const task = th->task();
|
||||||
if (task != nullptr) {
|
if (task != nullptr) {
|
||||||
@ -533,6 +538,8 @@ void CompilationMemoryStatistic::on_arena_change(ssize_t diff, const Arena* aren
|
|||||||
} else {
|
} else {
|
||||||
inform_compilation_about_oom(ct);
|
inform_compilation_about_oom(ct);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
arena_stat->set_limit_in_process(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,6 +50,7 @@ class ArenaStatCounter : public CHeapObj<mtCompiler> {
|
|||||||
// MemLimit handling
|
// MemLimit handling
|
||||||
size_t _limit;
|
size_t _limit;
|
||||||
bool _hit_limit;
|
bool _hit_limit;
|
||||||
|
bool _limit_in_process;
|
||||||
|
|
||||||
// Peak composition:
|
// Peak composition:
|
||||||
// Size of node arena when total peaked (c2 only)
|
// Size of node arena when total peaked (c2 only)
|
||||||
@ -86,6 +87,9 @@ public:
|
|||||||
|
|
||||||
size_t limit() const { return _limit; }
|
size_t limit() const { return _limit; }
|
||||||
bool hit_limit() const { return _hit_limit; }
|
bool hit_limit() const { return _hit_limit; }
|
||||||
|
bool limit_in_process() const { return _limit_in_process; }
|
||||||
|
void set_limit_in_process(bool v) { _limit_in_process = v; }
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class CompilationMemoryStatistic : public AllStatic {
|
class CompilationMemoryStatistic : public AllStatic {
|
||||||
|
@ -58,6 +58,7 @@ package compiler.print;
|
|||||||
import jdk.test.lib.process.OutputAnalyzer;
|
import jdk.test.lib.process.OutputAnalyzer;
|
||||||
import jdk.test.lib.process.ProcessTools;
|
import jdk.test.lib.process.ProcessTools;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -123,6 +124,20 @@ public class CompileCommandMemLimit {
|
|||||||
oa.shouldMatch("# *Internal Error.*");
|
oa.shouldMatch("# *Internal Error.*");
|
||||||
oa.shouldMatch("# *fatal error: " + ct + " *" + expectedNameIncl + ".*: Hit MemLimit .*limit: 4096.*");
|
oa.shouldMatch("# *fatal error: " + ct + " *" + expectedNameIncl + ".*: Hit MemLimit .*limit: 4096.*");
|
||||||
oa.shouldNotMatch(".*" + expectedNameExcl + ".*");
|
oa.shouldNotMatch(".*" + expectedNameExcl + ".*");
|
||||||
|
// Make sure we get a non-zero-sized replay file (JDK-8331314)
|
||||||
|
oa.shouldContain("# Compiler replay data is saved as:");
|
||||||
|
String replayfile = oa.firstMatch("# (\\S+replay_pid\\d+\\.log)", 1);
|
||||||
|
if (replayfile == null) {
|
||||||
|
throw new RuntimeException("Found no replay file in output");
|
||||||
|
}
|
||||||
|
File f = new File(replayfile);
|
||||||
|
if (!f.exists()) {
|
||||||
|
throw new RuntimeException("Replayfile " + replayfile + " not found");
|
||||||
|
}
|
||||||
|
if (f.length() == 0) {
|
||||||
|
throw new RuntimeException("Replayfile " + replayfile + " has size 0");
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Should see trace output when methods are compiled
|
// Should see trace output when methods are compiled
|
||||||
oa.shouldHaveExitValue(0)
|
oa.shouldHaveExitValue(0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user