hotspot/agent/doc/c2replay.html
author minqi
Mon, 12 Nov 2012 14:03:53 -0800
changeset 14477 95e66ea71f71
permissions -rw-r--r--
6830717: replay of compilations would help with debugging Summary: When java process crashed in compiler thread, repeat the compilation process will help finding root cause. This is done with using SA dump application class data and replay data from core dump, then use debug version of jvm to recompile the problematic java method. Reviewed-by: kvn, twisti, sspitsyn Contributed-by: yumin.qi@oracle.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
14477
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
     1
<html>
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
     2
<head>
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
     3
<title>
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
     4
C2 Replay
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
     5
</title>
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
     6
</head>
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
     7
<body>
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
     8
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
     9
<h1>C2 compiler replay</h1>
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    10
<p>
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    11
The C2 compiler replay is a function to repeat the compiling process from a crashed java process in compiled method<br>
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    12
This function only exists in debug version of VM
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    13
</p>
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    14
<h2>Usage</h2>
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    15
<pre> 
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    16
First, use SA to attach to the core file, if suceeded, do
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    17
       clhsdb>dumpreplaydata <address> | -a | <thread_id> [> replay.txt]
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    18
       create file replay.txt, address is address of Method, or nmethod(CodeBlob)
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    19
       clhsdb>buildreplayjars [all | boot | app]
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    20
       create files:
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    21
         all:
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    22
           app.jar, boot.jar
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    23
         boot:
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    24
           boot.jar
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    25
         app:
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    26
           app.jar
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    27
       exit SA now.
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    28
Second, use the obtained replay text file, replay.txt and jar files, app.jar and boot.jar, using debug version of java
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    29
       java -Xbootclasspath/p:boot.jar -cp app.jar -XX:ReplayDataFile=<datafile> -XX:+ReplayCompiles ....
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    30
       This will replay the compiling process.
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    31
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    32
       With ReplayCompiles, the replay will recompile all the methods in app.jar, and in boot.jar to emulate the process in java app.
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    33
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    34
notes:
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    35
       1) Most time, we don't need the boot.jar which is the classes loaded from JDK. It will be only modified when an agent(JVMDI) is running and modifies the classes.
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    36
       2) If encounter error as "<flag>" not found, that means the SA is using a VMStructs which is different from the one with corefile. In this case, SA has a utility tool vmstructsdump which is located at agent/src/os/<os>/proc/<os_platform>
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    37
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    38
       Use this tool to dump VM type library:
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    39
       vmstructsdump libjvm.so > <type_name>.db
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    40
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
    41
       set env SA_TYPEDB=<type_name>.db (refer different shell for set envs)