hotspot/agent/doc/c2replay.html
author amurillo
Fri, 26 Apr 2013 00:29:12 -0700
changeset 17040 e6d52b5fe8d1
parent 14477 95e66ea71f71
permissions -rw-r--r--
Added tag hs25-b30 for changeset 18be17ecfd6c
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)