烧点脑子使劲看--JVM常用命令

简介: 常用命令2.1 jps

常用命令


2.1 jps

查看进程

The jps command lists the instrumented Java HotSpot VMs on the target system. The command is limited to reporting information on JVMs for which it has the access permissions.

网络异常,图片无法展示
|


2.2 jinfo

  • 实时查看和调整JVM参数

The jinfo command prints Java configuration information for a specified Java process or core file or a remote debug server. The configuration information includes Java system properties and Java Virtual Machine (JVM) command-line flags.

  • 查看

格式:jinfo -flag   如:jinfo -flag UserG1GC 126492

网络异常,图片无法展示
|


  • 修改

只有被标记为manageable的参数才可以使用jinfo实时修改

格式: 1. jinfo -flag [+/-]  2. jinfo -flag =  如 jinfo -flag HeapDumpPath=log/heap.hprof 126492

网络异常,图片无法展示
|


2.3 jstat

  • 查看类装载信息

jstat -class PID 1000 10 查看某个java进程的类装载信息,每1000毫秒输出一次,共输出10 次

网络异常,图片无法展示
|


  • 查看垃圾收集信息

jstat -gc PID 1000 10

网络异常,图片无法展示
|


2.4 jstack

  • 查看线程堆栈信息

jstack PID

网络异常,图片无法展示
|


  • 排查死锁案例
    1. 死锁代码
public class DeadLockDemo implements Runnable {
    boolean flag;
    public DeadLockDemo(boolean flag) {
        this.flag = flag;
    }
    @Override
    public void run() {
        if (flag) {
            while (true) {
                synchronized (MyLock.lock1) {
                    System.out.println(Thread.currentThread().getName() + ": 获得lock1");
                    synchronized (MyLock.lock2) {
                        System.out.println(Thread.currentThread().getName() + ": 获得lock2");
                    }
                }
            }
        } else {
            while (true) {
                synchronized (MyLock.lock2) {
                    System.out.println(Thread.currentThread().getName() + ": 获得lock1");
                    synchronized (MyLock.lock1) {
                        System.out.println(Thread.currentThread().getName() + ": 获得lock2");
                    }
                }
            }
        }
    }
    public static void main(String[] args) {
        Thread thread1 = new Thread(new DeadLockDemo(true), "线程1");
        Thread thread2 = new Thread(new DeadLockDemo(false), "线程2");
        thread1.start();
        thread2.start();
    }
}
class MyLock {
    public static final Object lock1 = new Object();
    public static final Object lock2 = new Object();
}


  1. 运行结果*

网络异常,图片无法展示
|

3. jstack分析

网络异常,图片无法展示
|


Found one Java-level deadlock: ============================= "线程2": waiting to lock monitor 0x000000001c5db238 (object 0x000000076bc16bc0, a java.lang.Object), which is held by "线程1" "线程1": waiting to lock monitor 0x000000001c5ddac8 (object 0x000000076bc16bd0, a java.lang.Object), which is held by "线程2" Java stack information for the threads listed above: =================================================== "线程2": at DeadLockDemo.run(DeadLockDemo.java:27) - waiting to lock <0x000000076bc16bc0> (a java.lang.Object) - locked <0x000000076bc16bd0> (a java.lang.Object) at java.lang.Thread.run(Thread.java:748) "线程1": at DeadLockDemo.run(DeadLockDemo.java:18) - waiting to lock <0x000000076bc16bd0> (a java.lang.Object) - locked <0x000000076bc16bc0> (a java.lang.Object) at java.lang.Thread.run(Thread.java:748) Found 1 deadlock.

2.5 jmap

  • 生成堆转储快照

The jmap command prints shared object memory maps or heap memory details of a specified process, core file, or remote debug server.

  • 打印堆内存相关信息

jmap -heap PID

网络异常,图片无法展示
|


  • dump出堆内存相关信息

jmap -dump:format=b,file=heap.hprof PID

网络异常,图片无法展示
|

  • 当发生堆内存溢出时,自动生成dump文件

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof

目录
相关文章
|
9月前
|
监控 Java 编译器
JVM运行命令
JVM运行命令
66 0
|
7月前
|
jenkins Java Shell
Jenkins 打包shell出现gradle命令不存在,jvm内存溢出
Jenkins 打包shell出现gradle命令不存在,jvm内存溢出
65 4
|
7月前
|
算法 Java 编译器
JVM常用命令整理
JVM常用命令整理
91 0
|
12月前
|
运维 监控 数据可视化
JVM调试命令与调试工具
JVM调试命令与调试工具
180 0
|
12月前
|
监控 Java 编译器
JVM常用命令及其用法,简直太全了!
JVM常用命令及其用法,简直太全了!
454 0
|
Java
JVM 排查问题常用命令
jcmd-查找jvm进程信息 jcmd 进程ID help
54 0
|
Java
JVM命令-jcmd
1. jcmd -l 列出当前虚拟机的java进程 2.jcmd 进程ID help 列出当前java进程 能使用的jvm指令。这些指令可通过名字就知道是做什么的
103 0
JVM命令-jcmd
|
监控 数据可视化 Java
【Java虚拟机】JVM常见诊断命令和调试工具
【Java虚拟机】JVM常见诊断命令和调试工具
【Java虚拟机】JVM常见诊断命令和调试工具
|
Java
JVM(六)JVM调优命令
JVM(六)JVM调优命令
87 0
|
Java
使用JAVA命令查看JVM参数
使用JAVA命令查看JVM参数
89 0