在oracle JDK 中我们可以通过Jmap (获取heapdump)Jstack (获取core文件)进行问题分析,但在使用 IBM JDK 中并没有提供这些工具,虽然我们可以通过以下命令获取javacore,假如我们没有在启动时假如是-Xdump 参数是没法获取heapdump的。
kill -3 ${pid}
- kill -3 并不会杀死该线程,只是类似于发送一个中断信号,让dump agent 生成一个javacore文件。
-Xdump的功能参数如下:
-Xdump:help 打印dump heip
-Xdump:none 忽略所有的dump默认设置
-Xdump:events 写明所有可用的触发dump的事件
-Xdump:request List additional VM requests
-Xdump:tokens List recognized label tokens
-Xdump:dynamic 是否支持可插拔的agents
-Xdump:what 展示启动时注册的agents
-Xdump 子选项参数:
-Xdump:<type>:help Print detailed dump help
-Xdump:<type>:none 忽略这个dump参数以前的配置
-Xdump:<type>:defaults 打印这个dump参数默认的选项
-Xdump 类型参数:
-Xdump:console 只打印线程的基础状态
-Xdump:system 收集整个内存空间的信息
-Xdump:tool 命令行模式
-Xdump:java 生成javacore
-Xdump:heap 生成heapdump
-Xdump:snap 生成缓存快照
下面我们重点说一下我们最常用的event参数-Xdump:events ,其主要作用是根据我们evnets给定的触发器生成我们配置的dump的类型如javacore,heapdump等。
其主要关键字如下:
Supported event keywords Event hook
gpf ON_GP_FAULT
user ON_USER_SIGNAL
abort ON_ABORT_SIGNAL
vmstart ON_VM_STARTUP
vmstop ON_VM_SHUTDOWN
load ON_CLASS_LOAD
unload ON_CLASS_UNLOAD
throw ON_EXCEPTION_THROW
catch ON_EXCEPTION_CATCH
brkpoint ON_BREAKPOINT
framepop ON_DEBUG_FRAME_POP
thrstart ON_THREAD_START
blocked ON_THREAD_BLOCKED
thrstop ON_THREAD_END
expand ON_HEAP_EXPAND
fullgc ON_GLOBAL_GC
uncaught ON_EXCEPTION_DESCRIBE
slow ON_SLOW_EXCLUSIVE_ENTER
any *
在使用evnet的如throw即抛错 catch 捕捉错误等时必须加入filter参数,如下:
-Xdump:java:events=throw,filter=java/lang/OutOfMem*
上述语句就是在抛出 OOM错误的时候生成javacore。
-
在生成dump的时候是有顺序的,我们可以通过priority参数设置,默认情况下:
system dump (priority 999)
snap dump (priority 500)
javadump (priority 10)
java -Xdump:heap:events=vmstop,priority=123
-
console dump 这是最简单的dump,只生成关于线程的信息,这里有一个自选项 range,如 range=1..1 即仅输出一个线程的信息
java -Xdump:console:events=thrstart+thrstop,range=1..1
输出信息如下
-------- Console dump --------
Stack Traces of Threads:
ThreadName=Signal Dispatcher(00035B24)
Status=Running
ThreadName=main(00035A1C)
Status=Waiting
Monitor=00035128 (VM sig quit)
Count=0
Owner=(00000000)
^^^^^^^^ Console dump ^^^^^^^^
-
system dump 这个包括整个地址空间的信息,一般会有几G大的文件,而且需要好几分钟生成,请谨慎使用。
-
Java dump 它是我们分析jvm的主要武器,它为我们提供如下信息:线程信息,被加载的类等
-
heap dump 这个应该大家都知道
网友评论