整理一些较常用的JVM指令

本文详细介绍了JVM的一些关键指令,包括查看JVM版本、设置系统属性、选择服务器模式、调整堆内存,以及利用jstat、jmap、jstack、MAT工具和VisualVM进行性能监控和内存分析。通过这些工具,可以有效地诊断和优化Java应用程序的性能问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实战

1、查看JVM版本

java -version

2、通过-D设置系统属性参数

//编译
javac TestJVM.java
//测试
java TestJVM
//添加运行参数
java -Dstr=123 TestJVM

3、-server与-client参数

server默认的初始堆空间大一些,默认并行垃圾回收器,启动慢,运行快

//用clinet启动
java -client -showversion TestJVM
//server
java -server -showversion TestJVM

## 64位系统就不支持client模式了

4、-Xms与-Xmx参数

  1. -Xms与-Xmx分别是设置jvm的堆内存的初始大小和最大大小。
  2. -Xmx2048m:等价于-XX:MaxHeapSize,设置JVM最大堆内存为2048M。
  3. -Xms512m:等价于-XX:InitialHeapSize,设置JVM初始堆内存为512M。
 java -Xms512m -Xmx2048m TestJVM

5、查看JVM运行参数

分两种情况

  1. 运行java命令时打印出运行参数;
  2. 查看正在运行的java进程的参数;

1、启动运行时,启动-XX:+PrintFlagsFinal,即可打印参数

java -XX:+PrintFlagsFinal -version

注意:参数有boolean类型和数字类型,值的操作符是=或:=,分别代表默认值和被修改的值。
2、查看正在运行的JVM参数

# 查看所有的参数,用法:jinfo -flags <进程id>
例:jinfo -flags 1136
# 通过jps 或者 jps -l 查看java进程
例:jps
例:jps -l
# 查看某一参数的值,jinfo -flag <参数名> <进程id>
例:jinfo -flag MaxHeapSize 6219

6、jstat命令进行查看堆内存使用情况

jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。

jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]

6.1、查看class加载统计

jstate -class 6219

说明:

  • Loaded:加载class的数量
  • Bytes:所占用空间大小
  • Unloaded:未加载数量
  • Bytes:未加载占用空间

6.2、查看编译统计

jstat -compiler 6219

说明:

  • Compiled:编译数量。
  • Failed:失败数量
  • Invalid:不可用数量
  • Time:时间
  • FailedType:失败类型
  • FailedMethod:失败的方法

6.3、垃圾回收统计

jstat -gc 6219

在这里插入图片描述
在这里插入图片描述

7、jmap命令查看内存使用情况

7.1、查看内存使用情况

 jmap -heap 6219

在这里插入图片描述

7.2、查看内存中对象数量及大小

#查看所有对象,包括活跃以及非活跃的 
jmap -histo <pid> | more 
#查看活跃对象
jmap -histo:live <pid> | more
例:jmap -histo:live 6219 | more

在这里插入图片描述

7.3、将内存使用情况dump到文件中

tip:有些时候我们需要将jvm当前内存中的情况dump到文件中,然后对它进行分析,jmap也是支持dump到文件中的

#用法:
jmap -dump:format=b,file=dumpFileName <pid>
#示例
jmap -dump:format=b,file=/tmp/dump.dat 6219

7.4、通过jhat对dump文件进行分析

#用法:
jhat -port <port> <file>
#示例:
jhat -port 9999 /tmp/dump.dat

打开浏览器进行访问:http://ip:9999/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8、通过MAT工具对dump文件进行分析

MAT介绍:
MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象

下载地址:https://www.eclipse.org/mat/downloads.php
官网地址:https://www.eclipse.org/mat/
在这里插入图片描述
使用
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9、jstack命令的使用(CPU负载突然增高,出现思索,死循环)

有些时候我们需要查看下jvm中的线程执行情况,比如,发现服务器的CPU的负载突然增高了、出现了死锁、死循环等,我们该如何分析呢?
由于程序是正常运行的,没有任何的输出,从日志方面也看不出什么问题,所以就需要看下jvm的内部线程的执行情况,然后再进行分析查找出原因

#用法:jstack <pid>

10、VisualVM工具的使用

VisualVM,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。
VisualVM使用简单,几乎0配置,功能还是比较丰富的,几乎囊括了其它JDK自带命令的所有功能。
在这里插入图片描述

10.1启动

在jdk的安装目录的bin目录下,找到jvisualvm.exe,双击打开即可。

在这里插入图片描述
在这里插入图片描述

10.2、查看本地进程

在这里插入图片描述

10.3、查看CPU、内存、类、线程运行信息

在这里插入图片描述

10.4、查看线程详情

在这里插入图片描述在这里插入图片描述

10.5、抽样器

在这里插入图片描述

10.6、监控远程的jvm

VisualJVM不仅是可以监控本地jvm进程,还可以监控远程的jvm进程,需要借助于JMX技术实现。
tip:什么是JMX?
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。
JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。

a、指令监控远程tomcat

想要监控远程的tomcat,就需要在远程的tomcat进行对JMX配置,方法如下:

#在tomcat的bin目录下,修改catalina.sh,添加如下的参数
JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false"

参数意思是:
在这里插入图片描述

b、 使用VisualJVM连接远程tomcat

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值