注意:该篇博客主要记录自《深入理解java虚拟机(第二版)》

说明:关于命令行的JVM性能监控与故障处理工具见《第七章 JVM性能监控与故障处理工具(1)

1、图像化的故障处理工具

  • Jconsole
  • visualVM

2、Jconsole

进入"E:\Java\jdk1.6\bin",双击"jconsole.exe",弹出如下框:

第八章 JVM性能监控与故障处理工具(2)

说明:这里列出了所有的JVM进程,一个Jconsole进程,一个eclipse(PID:4684),这相当于jps命令。

选中其中一个PID,假设选中了eclipse,双击,出现下图:(注:之后的各个叶签,都是每4秒刷新一次

第八章 JVM性能监控与故障处理工具(2)

"内存":相当于jstat -gc,在上图中的详细信息部分,该部分对应的信息就是头部图表部分所写的参数(这里是"整个堆"的情况),同时对应的也是右下角部分柱状图所选中的柱子(这里是"堆"),对于"非堆"指的就是"方法区"(或者称为"永久代")。当然,这里也可以选择时间范围来查看相应的信息。

"类":相当于jstat -class,列出了装载类和卸载类的相关信息。

第八章 JVM性能监控与故障处理工具(2)

"线程":相当于jstack,折线图显示了线程数目的变化情况,包括峰值线程数量、活动线程数量;左下角展示了所有线程名称。双击相应的线程名称

第八章 JVM性能监控与故障处理工具(2)

"VM摘要":相当于jinfo

第八章 JVM性能监控与故障处理工具(2)

最后,测试一下线程死锁的现象。代码如下:

 1 package thread;
 2 
 3 /**
 4  * 测试线程
 5  */
 6 class XXthread implements Runnable{
 7     int a,b;
 8     
 9     public XXthread(int a, int b) {
10         this.a = a;
11         this.b = b;
12     }
13 
14     public void run() {
15         synchronized (Integer.valueOf(a)) {
16             synchronized (Integer.valueOf(b)) {
17                 System.out.println(a + b);
18             }
19         }
20     }
21 }
22 
23 public class TestDeadLockThread {
24     public static void main(String[] args) {
25         for(int i=0;i<100;i++){
26             new Thread(new XXthread(1, 2)).start();
27             new Thread(new XXthread(2, 1)).start();
28         }
29     }
30 }
View Code

相关文章:

  • 2021-11-06
  • 2021-06-26
  • 2022-01-22
  • 2022-12-23
  • 2021-09-05
  • 2021-06-12
  • 2021-12-03
  • 2021-05-25
猜你喜欢
  • 2022-01-05
  • 2022-02-18
  • 2022-12-23
  • 2021-10-12
  • 2021-05-17
  • 2021-05-30
相关资源
相似解决方案