java应用故障排查

对于在线运行的程序来说
常常会因为流量过高 程序bug 依赖故障 线程死锁 配置错误等一些列原因导致系统不可用或者部分不可用
如果能善加利用JDK提供的工具,往往会方便问题的解决
 
JPS
检查当前所有java进程pid
 
JSTAT
分析JVM内存状态 检查各代大小

Jstat用于监控基于HotSpot的JVM,对其堆的使用情况进行实时的命令行的统计,使用jstat我们可以对指定的JVM做如下监控:

- 类的加载及卸载情况

- 查看新生代、老生代及持久代的容量及使用情况

- 查看新生代、老生代及持久代的垃圾收集情况,包括垃圾回收的次数及垃圾回收所占用的时间

- 查看新生代中Eden区及Survior区中容量及分配情况等

jstat工具特别强大,它有众多的可选项,通过提供多种不同的监控维度,使我们可以从不同的维度来了解到当前JVM堆的使用情况。详细查看堆内各个部分的使用量,使用的时候必须加上待统计的Java进程号,可选的不同维度参数以及可选的统计频率参数。

 

JSTACK
线程快照 检查线程死锁等
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息
如果现在运行的java程序呈现hung的状态,jstack是非常有用的
 
JMAP
堆的信息 检查内存泄露 打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。

可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。使用方法 jmap -histo pid。如果连用SHELL jmap -histo pid>a.log可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。jmap -dump:format=b,file=outfile 3024可以将3024进程的内存heap输出出来到outfile文件里,再配合MAT(内存分析工具(Memory Analysis Tool),使用参见:http://blog.csdn.net/fenglibing/archive/2011/04/02/6298326.aspx)或与jhat (Java Heap Analysis Tool)一起使用,能够以图像的形式直观的展示当前内存是否有问题。

 

 

原文地址:https://www.cnblogs.com/lnas01/p/5261926.html