java基础教程虚拟机性能分析和故障解决工具【图形化界面】
--------------作用:帮助判断cpu占用率过高、死循环、死锁、内存泄露、内存溢出等等问题。
■ JConsole:重点学查看线程、内存
■ VisualVM (推荐):跟JConsole 功能一样,但是功能比JConsole强大。【详细介绍】
1、jconsole------重点学查看线程、内存
2、VisualVM-----运行监视、故障处理、性能分析
■ VisualVM基于NetBeans平台开发,因此他一开始就具备了插件扩展功能的特性,通过插件扩展支持,VisualVM可以做到:
- 显示虚拟机进程以及进程的配置、环境信息(jps、jinfo)。
- 监视应用程序的CPU、GC、堆、方法区以及线程的信息(jstat、jstack)。
- dump以及分析堆转储快照(jmap、jhat)。
- 方法级的程序运行性能分析,找到被调用最多、运行时间最长的方法。
- 离线程序快照:收集程序的运行时配置、线程dump、内存dump等信息建立一个快照,可以将快照发送开发者处进行Bug反馈。
- 其他plugins的无限的可能性…
■ 使用与安装插件:
1.在终端输入:jvisualvm执行即可;
2.安装插件:
2.1 从主菜单中选择“工具”>“插件” ;
2.2 在“可用插件”标签中,选中该插件的“安装”复选框。单击“安装” ;
2.3 逐步完成插件安装程序。
✿ 测试类的代码:
package jvisualvm; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * JVisualVM 内存分析 * @author Huangyujun * */ public class jvisualvmDemo1 { public static void main(String[] args) throws IOException, InterruptedException { test1(); System.in.read(); } private static void test1() throws InterruptedException { List<Student> list = new ArrayList<>(); for(int i = 0; i < 100; i++) { Thread.sleep(1000); list.add(new Student()); } } } class Student { private byte[] big = new byte[5 * 1024 * 1024]; //5M }
■ 使用jvisualvm 具体步骤:
1):先在eclipse终端上输入:jvisualvm
2):选中咱的测试类双击:
■ 看到的工具栏这些选项,其实就对应的是jvisualvm中安装的插件,需要更多功能,就安装一下啦
■ 堆Dump 和 线程Dump【重点】
1): 堆Dump:在监视中有堆Dump 【点完观察最左边应用程序生成了一个堆Dump 文件; 当然这时候点概述也可以看到堆Dump 数量,点击它也可以查看堆Dump文件信息】
2): 线程Dump:在线程选项里有线程Dump
■ 还有抽样器:对CPU和内存进行一段时长的取样,从而对应用程序进行分析 【通过 快照或者暂停,获取到某个时刻的内存或cpu状态】
3,补充jvisualvm的使用---检查死锁:
1):代码案例:
private static void dealLock() { Lock lock1 = new ReentrantLock(); Lock lock2 = new ReentrantLock(); new Thread(() -> { try { lock1.lock();//在线程myThread1中:lock1锁完不释放去睡觉了,在线程myThread2中:lock1 想再锁没机会呀 Thread.sleep(100); lock2.lock(); } catch (InterruptedException e) { e.printStackTrace(); } }, "myThread1").start(); new Thread(() -> { try { lock2.lock(); Thread.sleep(100); lock1.lock(); } catch (InterruptedException e) { e.printStackTrace(); } }, "myThread2").start(); }
2):jvisualvm工具中的情况: