提交 d7769f60 编写于 作者: F fmatte

8194642: Improve OOM error reporting for JDK8

Reviewed-by: dholmes, kevinw
上级 cc08c1ca
...@@ -304,6 +304,47 @@ void VMError::print_stack_trace(outputStream* st, JavaThread* jt, ...@@ -304,6 +304,47 @@ void VMError::print_stack_trace(outputStream* st, JavaThread* jt,
#endif // ZERO #endif // ZERO
} }
static void print_oom_reasons(outputStream* st) {
st->print_cr("# Possible reasons:");
st->print_cr("# The system is out of physical RAM or swap space");
if (UseCompressedOops) {
st->print_cr("# The process is running with CompressedOops enabled, and the Java Heap may be blocking the growth of the native heap");
}
if (LogBytesPerWord == 2) {
st->print_cr("# In 32 bit mode, the process size limit was hit");
}
st->print_cr("# Possible solutions:");
st->print_cr("# Reduce memory load on the system");
st->print_cr("# Increase physical memory or swap space");
st->print_cr("# Check if swap backing store is full");
if (LogBytesPerWord == 2) {
st->print_cr("# Use 64 bit Java on a 64 bit OS");
}
st->print_cr("# Decrease Java heap size (-Xmx/-Xms)");
st->print_cr("# Decrease number of Java threads");
st->print_cr("# Decrease Java thread stack sizes (-Xss)");
st->print_cr("# Set larger code cache with -XX:ReservedCodeCacheSize=");
if (UseCompressedOops) {
switch (Universe::narrow_oop_mode()) {
case Universe::UnscaledNarrowOop:
st->print_cr("# JVM is running with Unscaled Compressed Oops mode in which the Java heap is");
st->print_cr("# placed in the first 4GB address space. The Java Heap base address is the");
st->print_cr("# maximum limit for the native heap growth. Please use -XX:HeapBaseMinAddress");
st->print_cr("# to set the Java Heap base and to place the Java Heap above 4GB virtual address.");
break;
case Universe::ZeroBasedNarrowOop:
st->print_cr("# JVM is running with Zero Based Compressed Oops mode in which the Java heap is");
st->print_cr("# placed in the first 32GB address space. The Java Heap base address is the");
st->print_cr("# maximum limit for the native heap growth. Please use -XX:HeapBaseMinAddress");
st->print_cr("# to set the Java Heap base and to place the Java Heap above 32GB virtual address.");
break;
default:
break;
}
}
st->print_cr("# This output file may be truncated or incomplete.");
}
// This is the main function to report a fatal error. Only one thread can // This is the main function to report a fatal error. Only one thread can
// call this function, so we don't need to worry about MT-safety. But it's // call this function, so we don't need to worry about MT-safety. But it's
// possible that the error handler itself may crash or die on an internal // possible that the error handler itself may crash or die on an internal
...@@ -375,19 +416,7 @@ void VMError::report(outputStream* st) { ...@@ -375,19 +416,7 @@ void VMError::report(outputStream* st) {
} }
// In error file give some solutions // In error file give some solutions
if (_verbose) { if (_verbose) {
st->print_cr("# Possible reasons:"); print_oom_reasons(st);
st->print_cr("# The system is out of physical RAM or swap space");
st->print_cr("# In 32 bit mode, the process size limit was hit");
st->print_cr("# Possible solutions:");
st->print_cr("# Reduce memory load on the system");
st->print_cr("# Increase physical memory or swap space");
st->print_cr("# Check if swap backing store is full");
st->print_cr("# Use 64 bit Java on a 64 bit OS");
st->print_cr("# Decrease Java heap size (-Xmx/-Xms)");
st->print_cr("# Decrease number of Java threads");
st->print_cr("# Decrease Java thread stack sizes (-Xss)");
st->print_cr("# Set larger code cache with -XX:ReservedCodeCacheSize=");
st->print_cr("# This output file may be truncated or incomplete.");
} else { } else {
return; // that's enough for the screen return; // that's enough for the screen
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册