author | minqi |
Mon, 12 Nov 2012 14:03:53 -0800 | |
changeset 14477 | 95e66ea71f71 |
permissions | -rw-r--r-- |
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) |