前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >jvm之虚拟机工具篇(三)

jvm之虚拟机工具篇(三)

作者头像
周杰伦本人
发布2022-10-25 16:16:22
3140
发布2022-10-25 16:16:22
举报
文章被收录于专栏:同步文章同步文章

虚拟机工具

jps

(java process status) 虚拟机进程状况工具

  • jps -l 主类全名
  • jps -m 运行传入主类的参数
  • jps -v 虚拟机参数

jstat

(JVM Statistics Monitoring Tool) 虚拟机统计信息监视工具

类加载,内存,垃圾收集,jit编译信息、

image-20200625121020730
image-20200625121020730

E 代表eden区 o代表old区 m代表元空间metaspace YGC是young GC的次数 YGCT是youngGC所花的时间 单位是秒 FGC是Full GC的次数 FGCT是FullGC所花的时间 GCT是所有GC所花的时间 实例:

死锁程序:

代码语言:javascript
复制
package jvm;

public class TestDeadLock {

    public void run() {
        MyThread myThread = new MyThread();
        new Thread(myThread,"张三").start();
        new Thread(myThread,"李四").start();

    }

    public static void main(String[] args) {
        new TestDeadLock().run();
    }

    class MyThread implements Runnable {
        private Object o1 = new Object();
        private Object o2 = new Object();
        private boolean flag = true;


        @Override
        public void run() {
            if (flag) {
                flag = false;
                synchronized (o1) {
                    System.out.println(Thread.currentThread().getName()+" have o1");

                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (o2) {
                        System.out.println(Thread.currentThread().getName()+" have o2");
                    }
                }
            }else {
                flag = true;
                synchronized (o2) {
                    System.out.println(Thread.currentThread().getName()+" have o2");
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (o1) {
                        System.out.println(Thread.currentThread().getName()+" have o1");
                    }
                }

            }
        }
    }
}

开始诊断:

image-20200625222739645
image-20200625222739645

查看进程 把运行信息 输出到20324这个文件中

image-20200625223153767
image-20200625223153767

jinfo

Java配置信息工具 实时调整和查看虚拟机参数 • -XX:[+/-]option • -XX:option=value

jmap

Memory Map for Java Java内存映像工具

• jmap -dump:formart=b,file=filepath pid • jmap -histo pid

to print histogram of java object heap; if the “live”

image-20200625224332391
image-20200625224332391

jmap -heap pid

打印堆信息

image-20200625224540800
image-20200625224540800

jhat

JVM Heap Analysis Tool 虚拟机堆转储快照分析工具

jstack

Stack Trace for Java Java堆栈跟踪工具

jconsole

java Monitoring and Management Console Java监视与管理控制台

image-20200625223249975
image-20200625223249975

eclipse memory analyzer

程序:

代码语言:javascript
复制
package jvm;

import java.util.ArrayList;
import java.util.List;

/**
 * 生成dump文件
 * -verbose:gc -XX:+PrintGCDetails -Xms10M -Xmx10M -Xmn5M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:/server3.dump
 */
public class Demo6 {

    static List<byte[]> array = new ArrayList<>();

    public static void main(String[] args) {
        byte[] b1 = new byte[2*1024*1024];
        byte[] b2 = new byte[2*1024*1024];
        byte[] b3 = new byte[2*1024*1024];
        byte[] b4 = new byte[4*1024*1024];
        array.add(b1);
        array.add(b2);
        array.add(b3);
        array.add(b4);
    }
}

日志信息:

image-20200626000810140
image-20200626000810140

用eclipse memory analyzer打开dump文件 然后分析一波。。

image-20200626000703738
image-20200626000703738
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 虚拟机工具
    • jps
      • jstat
        • jinfo
          • jmap
            • jhat
              • jstack
                • jconsole
                  • eclipse memory analyzer
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档