java问题排查命令
jps:查看java进程
jmap:导出堆详细信息(与jhat一起使用)
jhat:分析Java堆的命令(与jmap一起使用)
jstack:可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多。
通常结合 ps、top、printf、grep命令使用。
printf "%x
" 21742得到21742的十六进制值为54ee。
dump 文件里,值得关注的线程状态有:
- 死锁,
Deadlock(重点关注)- 执行中,Runnable
- 等待资源,
Waiting on condition(重点关注)- 等待获取监视器,
Waiting on monitor entry(重点关注)- 暂停,Suspended
- 对象等待中,Object.wait() 或 TIMED_WAITING
- 阻塞,
Blocked(重点关注)- 停止,Parked
jinfo:输出并修改运行时的java 进程的opts,用于输出JAVA系统参数及命令行参数
jstat:用于监控基于HotSpot的JVM,对其堆的使用情况进行实时的命令行的统计
- 类的加载及卸载情况
- 查看新生代、老生代及持久代的容量及使用情况
- 查看新生代、老生代及持久代的垃圾收集情况,包括垃圾回收的次数及垃圾回收所占用的时间
- 查看新生代中Eden区及Survior区中容量及分配情况等
| Option | Displays... |
|---|---|
| class | 用于查看类加载情况的统计 |
| compiler | 用于查看HotSpot中即时编译器编译情况的统计 |
| gc | 用于查看JVM中堆的垃圾收集情况的统计 |
| gccapacity | 用于查看新生代、老生代及持久代的存储容量情况 |
| gccause | 用于查看垃圾收集的统计情况(这个和-gcutil选项一样),如果有发生垃圾收集,它还会显示最后一次及当前正在发生垃圾收集的原因。 |
| gcnew | 用于查看新生代垃圾收集的情况 |
| gcnewcapacity | 用于查看新生代的存储容量情况 |
| gcold | 用于查看老生代及持久代发生GC的情况 |
| gcoldcapacity | 用于查看老生代的容量 |
| gcpermcapacity | 用于查看持久代的容量 |
| gcutil | 用于查看新生代、老生代及持代垃圾收集的情况 |
| printcompilation | HotSpot编译方法的统计 |