虚拟机工具

Java性能监控与故障排查
本文详细介绍Java性能监控工具如jps、jstat、jinfo、jmap、jhat、jstack的功能及使用方法,包括类装载、内存、垃圾收集等信息的监控,以及线程和堆快照的生成。同时,提供了死锁示例代码,帮助理解并解决复杂问题。

一. jps (java process status)
在这里插入图片描述
本地虚拟机唯一id lvmid(local virtual machine id)
-m 运行时传入的主类参数
-v 虚拟机参数
-l 运行时主类全名或jar包名称

二.Jstat
类装载 内存 垃圾收集 jit编译的信息

元空间本质和永久代类似,都是对jvm方法区的实现,不同之处在于,元空间不在虚拟机中,而是使用直接内存。因此,在默认情况下,元空间仅仅受本地内存限制

三.jinfo(实时监控调整虚拟机的参数)
命令行
jinfo -flag UseG1GC 7568
查看虚拟机状态``
+表示启用
-表示禁用
在这里插入图片描述
四.jmap
在这里插入图片描述
生成堆快照信息
在这里插入图片描述
五.jhat
一般不在服务器上使用

六.jstack
生成线程快照,定位线程出现停顿的原因
在这里插入图片描述

  Map<Thread, StackTraceElement[]> allStackTraces = Thread.getAllStackTraces();
        Set<Map.Entry<Thread, StackTraceElement[]>> entries = allStackTraces.entrySet();
        Iterator<Map.Entry<Thread, StackTraceElement[]>> iterator = entries.iterator();
        while (iterator.hasNext()){
            Map.Entry<Thread, StackTraceElement[]> next = iterator.next();
            System.out.println(next.getKey()+"--------"+next.getValue());
        }

七.可视化虚拟机工具
jconsole

public class T5 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        scanner.nextInt();

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true){

                }
            }
        },"while true").start();
        scanner.nextInt();
        testWait(new Object());


    }
    private  static void testWait(Object obj){
        new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (obj){
                    try {
                        wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        },"wait").start();

    }
}

死锁

public class DeadLock implements Runnable {
    private  Object obj1;
    private  Object obj2;
    public DeadLock(Object obj1,Object obj2){
        this.obj1=obj1;
        this.obj2=obj2;
    }

    @Override
    public void run() {
synchronized (obj1){
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    synchronized (obj2){

        System.out.println("hello");
    }
}
    }
}
Object o = new Object();
        Object o1 = new Object();
        new Thread(new DeadLock(o,o1)).start();
        new Thread(new DeadLock(o1,o)).start();

八神器 visualvm
下载地址 https://visualvm.github.io/download.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

但行益事莫问前程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值