Steps To Troubleshoot Typical Java Problems
This section list some typical java problems and the actions we need to perform, the tools we need to use to collect more information and/or to analyse and debug the problem.
- Hung, Deadlocked, or Looping Process
- Post-mortem Diagnostics
- Monitoring
- Actions on a Remote Debug Server
- Other Functions
Hung, Deadlocked, or Looping Process
- Print thread stack for all Java threads.
- Control-\
- Print thread trace for a process.
kill -QUIT
pidjstack -F
pid (with-F
option if pid does not respond)
- Detect deadlocks.
- JConsole tool, Threads tab
- Print information on deadlocked threads: Control-\
- Print lock information for a process:
jstack -l
pid
- Get a heap histogram for a process.
- Start Java process with
-XX:+PrintClassHistogram
, then Control-\ - Start Java process with
-XX:+PrintClassHistogram
, thenkill -QUIT
pid jmap -histo
pid (with-F
option if pid does not respond)
- Start Java process with
- Dump Java heap for a process in binary format to file.
jmap -dump:format=b,file=
filename pid (with-F
option if pid does not respond)
- Print shared object mappings for a process.
jmap
pid
- Print heap summary for a process.
jmap -heap
pid
- Print finalization information for a process.
jmap -finalizerinfo
pid
- Attach the command-line debugger to a process.
jdb -connect sun.jvm.hotspot.jdi.SAPIDAttachingConnector:pid=
pid
- Attach the command-line debugger to a core file on the same machine.
jdb -connect sun.jvm.hotspot.jdi.SACoreAttachingConnector:javaExecutable=
path,core=
corefile
- Attach the command-line debugger to a core file on a different machine.
- On the machine with the core file:
jsadebugd
path corefile
and on the machine with the debugger:jdb -connect sun.jvm.hotspot.jdi.SADebugServerAttachingConnector:debugServerName=
machine
- On the machine with the core file:
Post-mortem Diagnostics
- Examine the fatal error log file. Default file name is
hs_err_pid
pid.log
in the working-directory. - Create a heap dump.
- HPROF:
java -agentlib:hprof=file=
file,format=b
application; then Control-\ - HPROF:
java -agentlib:hprof=heap=dump
application - JConsole tool, MBeans tab
- Start VM with
-XX:+HeapDumpOnOutOfMemoryError
; if OutOfMemoryError is thrown, VM generates a heap dump.
- HPROF:
- Browse Java heap dump.
jhat
heap-dump-file
- Dump Java heap from core file in binary format to a file.
jmap -dump:format=b,file=
filename corefile
- Get a heap histogram from a core file.
jmap -histo
corefile
- Print shared object mappings from a core file.
jmap
corefile
- Print heap summary ffrom a core file.
jmap -heap
corefile
- Print finalization information from a core file.
jmap -finalizerinfo
corefile
- Print Java configuration information from a core file.
jinfo
corefile
- Print thread trace from a core file.
jstack
corefile
- Print lock information from a core file.
jstack -l
corefile
Monitoring
- Print statistics on the class loader.
jstat -class
vmID - Print statistics on the compiler.
- Compiler behavior:
jstat -compiler
vmID - Compilation method statistics:
jstat -printcompilation
vmID
- Compiler behavior:
- Print statistics on garbage collection.
- Summary of statistics:
jstat -gcutil
vmID - Summary of statistics, with causes:
jstat -gccause
vmID - Behavior of the gc heap:
jstat -gc
vmID - Capacities of all the generations:
jstat -gccapacity
vmID - Behavior of the new generation:
jstat -gcnew
vmID - Capacity of the new generation:
jstat -gcnewcapacity
vmID - Behavior of the old and permanent generations:
jstat -gcold
vmID - Capacity of the old generation:
jstat -gcoldcapacity
vmID - Capacity of the permanent generation:
jstat -gcpermcapacity
vmID
- Summary of statistics:
- Monitor objects awaiting finalization
- JConsole tool, Summary tab
jmap -finalizerinfo
pidgetObjectPendingFinalizationCount
method injava.lang.management.MemoryMXBean
class
- Monitor memory
- Heap allocation profiles via HPROF:
java -agentlib:hprof=heap=sites
- JConsole tool, Memory tab
- Control-\ prints generation information.
- Heap allocation profiles via HPROF:
- Monitor CPU usage.
- By thread stack:
java -agentlib:hprof=cpu=samples
application - By method:
java -agentlib:hprof=cpu=times
application - JConsole tool, Overview and Summary tabs
- By thread stack:
- Monitor thread activity: JConsole tool, Threads tab
- Monitor class activity: JConsole tool, Classes tab
Actions on a Remote Debug Server
First, attach the debug daemon jsadebugd
, then execute the command.
- Dump Java heap in binary format to a file:
jmap -dump:format=b,file=
filename hostID - Print shared object mappings:
jmap
hostID - Print heap summary :
jmap -heap
hostID - Print finalization information :
jmap -finalizerinfo
hostID - Print lock information :
jstack -l
hostID - Print thread trace :
jstack
hostID - Print Java configuration information:
jinfo
hostID
Other Functions
- Interface with the instrumented Java virtual machines.
- Monitor for the creation and termination of instrumented VMs:
jstatd
daemon - List the instrumented VMs:
jps
- Provide interface between remote mointoring tools and local VMs:
jstatd
daemon
- Monitor for the creation and termination of instrumented VMs:
- Print Java configuration information from a running process.
jinfo
pid
- Dynamically set, unset, or change the value of certain Java VM flags for a process.
jinfo -flag
flag
- Pass a Java VM flag to the virtual machine.
jhat -J
flag ...jmap -J
flag ...
- Print statistics of permanent generation of Java heap, by class loader.
jmap -permstat
- Report on monitor contention.
java -agentlib:hprof=monitor=y
application
- Evaluate or execute a script in interactive or batch mode.
jrunscript
- Interface dynamically with an MBean, via JConsole tool, MBean tab:
- Show tree structure.
- Set an attribute value.
- Invoke an operation.
- Subscribe to notification.
No comments:
Post a Comment