United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: 4682937 Hotspot compilers should not call abort().
4682937 : Hotspot compilers should not call abort().

Details
Type:
Bug
Submit Date:
2002-05-10
Status:
Closed
Updated Date:
2002-08-06
Project Name:
JDK
Resolved Date:
2002-08-06
Component:
hotspot
OS:
solaris_8
Sub-Component:
runtime
CPU:
sparc
Priority:
P4
Resolution:
Duplicate
Affected Versions:
1.3.1_03
Fixed Versions:

Related Reports
Duplicate:

Sub Tasks

Description
Hotspot compilers have been seen to use the abort() system call when resources are exhausted. e.g. logging "OutofMemoryError" and calling abort().

Tests have shown that setting a suitably large -XX:MaxPermSize= may be a reliable solution.

In the interests of reliability however, dynamic code compilation should not be calling abort().  

If a compilation is attempted and cannot be completed, then the Java runtime should revert to interpreted mode.

Logging this fact somehow would be beneficial - in case performance questions are raised, and so that tuning parameters may be applied (without the unexpected downtime caused by an abort() ).


Example stacktrace, showing the kind of problem:
=======
current thread: t@11
=>[1] __sigprocmask(0x0, 0xfea01cd8, 0x0, 0x0, 0x0, 0x0), at 0xff369ab8
  [2] _resetsig(0xff36c408, 0x0, 0x0, 0xfea03d78, 0xff37e000, 0x0), at 0xff35e4fc
  [3] _sigon(0xfea03d78, 0xff3859a8, 0x6, 0xfea01dac, 0xfea03d78, 0xfea01df0), at 0xff35dc9c
  [4] _thrp_kill(0x0, 0xb, 0x6, 0xff37e000, 0xb, 0xff2bc498), at 0xff360cb0
  [5] qst(0x6, 0x0, 0x0, 0xffffffff, 0xff2bc404, 0xfea01f00), at 0xff24af98
  [6] abort(0xff2b800c, 0xfea01f00, 0x0, 0xfffffff8, 0x4, 0xfea01f21), at 0xff235774
  [7] os::abort(0x1, 0xfe796000, 0x1, 0xfe796000, 0xb7e08, 0xfea01f1c), at 0xfe6e836c
  [8] report_error(0xee, 0xfea02792, 0xec, 0xfe747838, 0xfe7d1880, 0xfe796000), at 0xfe653258
  [9] report_fatal(0xec, 0xfe796000, 0xfe76c288, 0xfea03144, 0xb7e08, 0x2b), at 0xfe652b28
  [10] ciEnv::get_constant_by_index_impl(0x0, 0xb7e08, 0xfea03b30, 0x2b, 0xfe796000, 0xfea031b0), at 0xfe5d934c
  [11] ciEnv::get_constant_by_index(0xfe7aa2a4, 0xb7e08, 0xfea03238, 0x2b, 0xfe796000, 0x23a330), at 0xfe5d90b8
  [12] ciBytecodeStream::get_constant(0x23a330, 0xfea03b30, 0xfe796000, 0xfea032b0, 0xfea03348, 0x3), at 0xfe5d8fa0
  [13] GraphBuilder::load_constant(0xfe796000, 0x91a80c, 0xfea03728, 0x91a804, 0x91a800, 0x91a7fc), at 0xfe5d8a50
  [14] GraphBuilder::connect_to_end(0xfe7c39fc, 0xfe7c3a00, 0xfe7c3a04, 0xfe7c3a08, 0xfe796000, 0xfe7bb53c), at 0xfe5af2d4
  [15] GraphBuilder::build_transitive_closure(0xfea03728, 0x91af48, 0xfe7c3a04, 0xfea03728, 0xfe796000, 0xfe7bb53c), at 0xfe5b2b48
  [16] GraphBuilder::build_transitive_closure(0x91d308, 0x4, 0x1, 0xfea03728, 0xfe796000, 0xfe7bb53c), at 0xfe5b2ba4
  [17] GraphBuilder::build_transitive_closure(0x91d0a0, 0x4, 0x1, 0xfea03728, 0xfe796000, 0xfe7bb53c), at 0xfe5b2ba4
  [18] GraphBuilder::build_transitive_closure(0x91cacc, 0x4, 0x1, 0xfea03728, 0xfe796000, 0xfe7bb53c), at 0xfe5b2ba4
  [19] GraphBuilder::build_transitive_closure(0x91c8e0, 0x4, 0x1, 0xfea03728, 0xfe796000, 0xfe7bb53c), at 0xfe5b2ba4
  [20] GraphBuilder::build_transitive_closure(0x91c5ec, 0x4, 0x1, 0xfea03728, 0xfe796000, 0xfe7bb53c), at 0xfe5b2ba4
  [21] GraphBuilder::build_transitive_closure(0x91c1d8, 0x4, 0x1, 0xfea03728, 0xfe796000, 0xfe7bb53c), at 0xfe5b2ba4
  [22] GraphBuilder::build_transitive_closure(0x91bfd4, 0x4, 0x1, 0xfea03728, 0xfe796000, 0xfe7bb53c), at 0xfe5b2ba4
  [23] GraphBuilder::GraphBuilder(0x91bcc4, 0x4, 0x1, 0x91a880, 0x91b164, 0xfea03728), at 0xfe5ae154
  [24] IRScope::build_graph(0x91b1d0, 0xfea03a50, 0xffffffff, 0x8d5f40, 0xfe796000, 0xfe796000), at 0xfe5acea4
  [25] IR::IR(0x91a83c, 0xfea03a50, 0x23a2e8, 0x91a870, 0x91a83c, 0x91a024), at 0xfe5ac0d8
  [26] Compilation::build_hir(0x91a7e8, 0xfe796000, 0xfea03a50, 0xfea03b5c, 0x400, 0xfffffffc), at 0xfe5abeb8
  [27] Compilation::compile_java_method(0xfea03a50, 0xfea039d4, 0xfea03a50, 0xb7e08, 0xfea03b5c, 0xfea03984), at 0xfe5aaf4c
  [28] Compilation::Compilation(0xb9938, 0xfea03b30, 0x23a2e8, 0xffffffff, 0xb991c, 0xfe796000), at 0xfe5aa974
  [29] Compiler::compile_method(0xb991c, 0xb98b0, 0xfe796000, 0x23a2e8, 0xffffffff, 0x23a2e8), at 0xfe5aa6d4
  [30] CompileBroker::invoke_compiler_on_method(0x23a2e8, 0x0, 0xfe7b604c, 0x0, 0x0, 0xf5f), at 0xfe5a5fcc
  [31] CompileBroker::compiler_thread_loop(0x28090, 0xb7e08, 0xfe796000, 0xfea03d18, 0xfe796000, 0xf94183a8), at 0xfe5a0430
  [32] JavaThread::run(0xfe904000, 0xfe79feb4, 0xfe796000, 0x100000, 0xb7e08, 0x100000), at 0xfe590310
  [33] _start(0xfe796000, 0xff325d18, 0x0, 0x5, 0x1, 0xfe401000), at 0xfe580134
dbx>

                                    

Comments
PUBLIC COMMENTS

Hotspot compilers have been seen to use the abort() system call when resources are exhausted. e.g. logging "OutofMemoryError" and calling abort().

Tests have shown that setting a suitably large -XX:MaxPermSize= may be a reliable solution.
                                     
2004-06-10
EVALUATION

The error needs to be propagated back so the compiler could bail out gracefully. 
Currently, this work is tracked as bug 4707386, which is commited to fix in
Mantis. Duplicate this bug to 4707386.

###@###.### 2002-08-06
                                     
2002-08-06



Hardware and Software, Engineered to Work Together