| <html> | |
| <head> | |
| <title> | |
| Replay | |
| </title> | |
| </head> | |
| <body> | |
| <h1>Compiler replay</h1> | |
| <p> | |
| The compiler replay is a function to repeat the compiling process from a crashed java process in compiled method<br> | |
| This function only exists in debug version of VM | |
| </p> | |
| <h2>Usage</h2> | |
| <pre> | |
| First, use SA to attach to the core file, if succeeded, do | |
| hsdb> dumpreplaydata <address> | -a | <thread_id> [> replay.txt] | |
| create file replay.txt, address is address of Method, or nmethod(CodeBlob) | |
| hsdb> buildreplayjars [all | boot | app] | |
| create files: | |
| all: | |
| app.jar, boot.jar | |
| boot: | |
| boot.jar | |
| app: | |
| app.jar | |
| exit SA now. | |
| Second, use the obtained replay text file, replay.txt and jar files, app.jar and boot.jar, using debug version of java | |
| java -Xbootclasspath/p:boot.jar -cp app.jar -XX:ReplayDataFile=<datafile> -XX:+ReplayCompiles .... | |
| This will replay the compiling process. | |
| With ReplayCompiles, the replay will recompile all the methods in app.jar, and in boot.jar to emulate the process in java app. | |
| notes: | |
| 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. | |
| 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> | |
| Use this tool to dump VM type library: | |
| vmstructsdump libjvm.so > <type_name>.db | |
| set env SA_TYPEDB=<type_name>.db (refer different shell for set envs) |