虚拟机性能监控与故障处理工具
一jps虚拟机进程状况工具
可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称,以及进程的本地虚拟机唯一ID
二 jstack java堆栈跟踪工具
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
public class TDeadLock {
public static String lock1=new String();
public static String lock2=new String();
static class ThreadA implements Runnable{
public ThreadA(){
}
@Override
public void run() {
synchronized (lock1) {
try {
Thread.sleep(1000);
synchronized (lock2) {
System.out.println("lock2");
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
static class ThreadB implements Runnable{
public ThreadB(){
}
@Override
public void run() {
synchronized (lock2) {
try {
Thread.sleep(1000);
synchronized(lock1){
System.out.println("lock1");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
Thread t1=new Thread(new TDeadLock.ThreadA());
Thread t2=new Thread(new TDeadLock.ThreadB());
t1.start();
t2.start();
}
}
现象描述 如上所示程序在运行时,突然卡死出现死锁
解决方案
通过jps命令可以查看死锁进程,并通过jstack可以死锁的进程进行分析,得出分析结果。
如上图所示是死锁的程序的
三 Jstat虚拟机统计信息监控工具
是用于监视虚拟机各种运行状态信息的命令工具。它可以用来显示远程或本地虚拟机的类装载,内存,垃圾收集,JIT编译等的运行数据。在没有GUI图形界面,只提供了纯文本控制台环境的服务器上。它将是运行定位虚拟机性能问题的首选工具。
E表示Eden区,S0,S1表示幸存区,O表述老年代,这几个区域都可以查看堆区所使用内存的百分比,YGC可以显示年青代GC的回收次数,YGCT可以显示年前代GC的回收时间,FGC就一显示整个GC的回收次数与回收时间以及 GCT总的回收时间。
四 jinfo java配置信息工具
五 jmap java内存映像工具
jmap命令用于生成转储快照,如果不使用jmap命令,要想获取java堆转储快照,就要配置虚拟机参数来预防了-XX:+HeapDumpOnOutOfMemoryError参数,或者通过-XX:+HeadDumpOnCtrlBreak 参数可以使用键让虚拟机生成dump文件。
jmap的作用并不仅仅是为了获取dump文件,它还可以查询finalize执行队列等
通过jmap -heap pid可以查看堆内存的使用情况等等。
通过jmap -dump可以生成虚拟机转储快照。
六 jhat 虚拟机堆转储快照分析工具
jhat内置一个http服务器,生成的dump文件分析结果,可以在浏览器中进行查看。
地址localhost:7000就可以看到,如下所示是我准备的一个死锁程序的分析结果。
以上这些命令,都有对应的可视化工具可以进行查看。