JVM的常用命令汇总

 更新时间:2022年10月26日 10:42:35   作者:人间凑个数  
监测java应用,最方便的就是直接使用jdk提供的现成工具,在jdk的安装的bin目录下,已经提供了多种命令行监测工具。本文为大家总结了几个JVM的常用命令,需要的可以参考一下

简介

监测java应用,最方便的就是直接使用jdk提供的现成工具,在jdk的安装的bin目录下,已经提供了多种命令行监测工具,以便于开发人员和运维人员监测java应用和诊断问题,因此,此类工具是java应用监测的重要手段。也是作为java开发人员需要掌握的基本技能。

jps

查看java进程。

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.

jinfo

(1)实时查看和调整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.

(2)查看用法

jinfo -flag name PID 查看某个java进程的name属性的值
jinfo -flag MaxHeapSize PID

jinfo -flag UseG1GC PID

(3)修改 参数只有被标记为manageable的flags可以被实时修改。

jinfo -flag [+|-] PID

jinfo -flag <name>=<value> PID

(4)查看曾经赋过值的一些参数

jinfo -flags PID

jstat

(1)查看虚拟机性能统计信息

The jstat command displays performance statistics for an instrumented Java HotSpot VM. The target JVM is identified by its virtual machine identifier, or vmid option.

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

(3)查看垃圾收集信息

jstat -gc PID 1000 10

jstack

(1)查看线程堆栈信息

The jstack command prints Java stack traces of Java threads for a specified Java process, core file, or remote debug server.

(2)用法

jstack PID

(4)排查死锁案例

DeadLockDemo

//运行主类

public class DeadLockDemo

{

    public static void main(String[] args)

    {

        DeadLock d1=new DeadLock(true);

        DeadLock d2=new DeadLock(false);

        Thread t1=new Thread(d1);

        Thread t2=new Thread(d2);

        t1.start();

        t2.start();

    }

}

//定义锁对象

class MyLock{

    public static Object obj1=new Object();

    public static Object obj2=new Object();

}

//死锁代码

class DeadLock implements Runnable{

    private boolean flag;

    DeadLock(boolean flag){

        this.flag=flag;

    }

    public void run() {

    if(flag) {

        while(true) {

            synchronized(MyLock.obj1) {

                System.out.println(Thread.currentThread().getName()+"----if获得obj1锁");

            synchronized(MyLock.obj2) {

                System.out.println(Thread.currentThread().getName()+"----if获得obj2锁");

            }

        }

    }

}

else {

    while(true){

        synchronized(MyLock.obj2) {

            System.out.println(Thread.currentThread().getName()+"----否则获得obj2锁");

        synchronized(MyLock.obj1) {

            System.out.println(Thread.currentThread().getName()+"----否则获得obj1锁");

        }

    }

}

}

}

}

运行结果

jstack分析

把打印信息拉到最后可以发现

jmap

(1)生成堆转储快照

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

(2)打印出堆内存相关信息

jmap -heap PID

jinfo -flag UsePSAdaptiveSurvivorSizePolicy 35352
-XX:SurvivorRatio=8

(3)dump出堆内存相关信息

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

(4)要是在发生堆内存溢出的时候,能自动dump出该文件就好了

一般在开发中,JVM参数可以加上下面两句,这样内存溢出时,会自动dump出该文件。

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

设置堆内存大小: -Xms20M -Xmx20M

启动,然后访问localhost:9090/heap,使得堆内存溢出

(5)关于dump下来的文件

一般dump下来的文件可以结合工具来分析,这块后面再说。

到此这篇关于JVM的常用命令汇总的文章就介绍到这了,更多相关JVM常用命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java如何从List中删除元素的正确用法举例

    Java如何从List中删除元素的正确用法举例

    这篇文章主要给大家介绍了关于Java如何从List中删除元素的正确用法, 列表List是Java中的一种数据结构,存放按照添加顺序的元素,是个有序的集合,需要的朋友可以参考下
    2023-07-07
  • 在Spring MVC中处理请求参数的方法总结

    在Spring MVC中处理请求参数的方法总结

    在Spring MVC中处理请求参数是通过使用各种注解来实现的,本文给大家介绍了在Spring MVC中处理不同类型请求参数的方法,并通过代码讲解的非常详细,需要的朋友可以参考下
    2024-08-08
  • Java关于后端怎么去接收Date、LocalDateTime类型的参数详解

    Java关于后端怎么去接收Date、LocalDateTime类型的参数详解

    这篇文章主要介绍了java关于后端怎么去接收Date、LocalDateTime类型的参数,文中有详细的代码流程,对我们学习或工作有一定的参考价值,需要的朋友可以参考下
    2023-06-06
  • JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版整理

    JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版整理

    JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和应用程序的程序开发环境。它由一个处于操作系统层之上的运行环境还有开发者编译,调试和运行用Java语言写的applet和应用程序所需的工具组成
    2014-01-01
  • java.net.SocketTimeoutException: Read timed out异常的解决

    java.net.SocketTimeoutException: Read timed o

    本文主要介绍了java.net.SocketTimeoutException: Read timed out异常的解决,可能是因为网络延迟、服务器响应慢或连接不稳定等原因造成的,下面就一起来介绍一下,感兴趣的可以了解一下
    2024-05-05
  • 一篇文章带你入门Java方法详解

    一篇文章带你入门Java方法详解

    这篇文章主要介绍了简单了解Java方法的定义和使用实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-08-08
  • java简单插入排序实例

    java简单插入排序实例

    这篇文章主要为大家详细介绍了java简单插入排序实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • java如何使用Lombok更优雅地编码

    java如何使用Lombok更优雅地编码

    Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。这样就省去了手动重建这些代码的麻烦,使代码看起来更简洁些。下面我们来详细学习下吧
    2019-06-06
  • Redis command timed out两种异常情况的解决方式

    Redis command timed out两种异常情况的解决方式

    Redis是我们开发中常用的数据库,下面这篇文章主要给大家介绍了关于Redis command timed out两种异常情况的解决方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • java实现文件夹解压和压缩

    java实现文件夹解压和压缩

    这篇文章主要为大家详细介绍了java实现文件夹解压和压缩,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03

最新评论