annotate agent/doc/c2replay.html @ 6972:bd7a7ce2e264

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
author minqi
date Mon, 12 Nov 2012 14:03:53 -0800
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6972
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
1 <html>
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
2 <head>
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
3 <title>
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
4 C2 Replay
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
5 </title>
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
6 </head>
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
7 <body>
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
8
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
9 <h1>C2 compiler replay</h1>
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
10 <p>
bd7a7ce2e264 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>
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
12 This function only exists in debug version of VM
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
13 </p>
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
14 <h2>Usage</h2>
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
15 <pre>
bd7a7ce2e264 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
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
17 clhsdb>dumpreplaydata <address> | -a | <thread_id> [> replay.txt]
bd7a7ce2e264 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)
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
19 clhsdb>buildreplayjars [all | boot | app]
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
20 create files:
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
21 all:
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
22 app.jar, boot.jar
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
23 boot:
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
24 boot.jar
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
25 app:
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
26 app.jar
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
27 exit SA now.
bd7a7ce2e264 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
bd7a7ce2e264 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 ....
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
30 This will replay the compiling process.
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
31
bd7a7ce2e264 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.
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
33
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
34 notes:
bd7a7ce2e264 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.
bd7a7ce2e264 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>
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
37
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
38 Use this tool to dump VM type library:
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
39 vmstructsdump libjvm.so > <type_name>.db
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents:
diff changeset
40
bd7a7ce2e264 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)