烧点脑子使劲看--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

目录
相关文章
|
14天前
|
Arthas 监控 数据可视化
JVM进阶调优系列(7)JVM调优监控必备命令、工具集合|实用干货
本文介绍了JVM调优监控命令及其应用,包括JDK自带工具如jps、jinfo、jstat、jstack、jmap、jhat等,以及第三方工具如Arthas、GCeasy、MAT、GCViewer等。通过这些工具,可以有效监控和优化JVM性能,解决内存泄漏、线程死锁等问题,提高系统稳定性。文章还提供了详细的命令示例和应用场景,帮助读者更好地理解和使用这些工具。
|
4月前
|
监控 Java
JVM内存问题之使用jstat命令查看GC堆百分比占比情况,应该使用哪个选项
JVM内存问题之使用jstat命令查看GC堆百分比占比情况,应该使用哪个选项
|
4月前
|
Java
JVM内存问题之jstack命令查看JVM线程快照如何解决
JVM内存问题之jstack命令查看JVM线程快照如何解决
|
4月前
|
开发者 Java
JVM内存问题之top命令的物理内存信息中,'used'和'free','avail Mem'分别表示什么
JVM内存问题之top命令的物理内存信息中,'used'和'free','avail Mem'分别表示什么
|
4月前
|
监控 Java 运维
开发与运维收集问题之jstat命令查看JVM垃圾回收情况如何解决
开发与运维收集问题之jstat命令查看JVM垃圾回收情况如何解决
43 1
|
3月前
|
Arthas Prometheus 监控
使用JDK自带工具调优JVM的常用命令
使用JDK自带工具调优JVM的常用命令
|
监控 Java 编译器
JVM运行命令
JVM运行命令
87 0
|
12月前
|
jenkins Java Shell
Jenkins 打包shell出现gradle命令不存在,jvm内存溢出
Jenkins 打包shell出现gradle命令不存在,jvm内存溢出
96 4
|
12月前
|
算法 Java 编译器
JVM常用命令整理
JVM常用命令整理
128 0
|
运维 监控 数据可视化
JVM调试命令与调试工具
JVM调试命令与调试工具
207 0