【JVM篇】四、JVM实战篇

本文详细介绍了JVM的实战应用,包括JVM参数的分类与使用,如-X和-XX参数,以及如何查看和调整参数。同时,讲解了jps、jinfo、jstat、jstack、jmap等JVM监控命令,用于查看进程状态、性能统计、堆内存和线程堆栈信息。此外,还提到了常用的JVM工具,如jconsole、jvisualvm,以及Arthas和MAT等诊断工具,帮助进行内存泄漏分析和GC日志分析。

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

【JVM篇】四、JVM实战篇

【JVM篇】目录:

01 JVM参数

1.1 标准参数

-version

-help

-server

-cp

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A2kT3Nh8-1607941873726)(D:\software\typora\workplace\imgs_jvm\26.png)]

1.2 -X参数

-Xint 解释执行

-Xcomp 第一次使用就编译成本地代码

-Xmixed 混合模式,JVM自己来决定

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lBIjuzlh-1607941873728)(D:\software\typora\workplace\imgs_jvm\27.png)]

1.3 -XX参数

使用最多的参数类型

非标准化参数,相对不稳定,主要用于JVM调优和Debug

a.Boolean类型

格式:-XX:[±] +或 +或-表示启用或者禁用name属性

比如:-XX:+UseConcMarkSweepGC 表示启用CMS类型的垃圾回收器

​ -XX:+UseG1GC 表示启用G1类型的垃圾回收器

b.非Boolean类型

格式:-XX= 表示name属性的值是value

比如:-XX:MaxGCPauseMillis=500

1.4 其它参数

-Xms1000等价于-XX:InitialHeapSize=1000

-Xmx1000等价于-XX:MaxHeapSize=1000

-Xss100等价于-XX:ThreadStackSize=100

1.5 查看参数

java -XX:+PrintFlagsFinal -version > flags.txt

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v3SRv4wX-1607941873729)(D:\software\typora\workplace\imgs_jvm\28.png)]

值得注意的是"=“表示默认值,”:="表示被用户或JVM修改后的值

要想查看某个进程具体参数的值,可以使用jinfo.

一般要设置参数,可以先查看一下当前参数是什么,然后进行修改

1.6 设置参数的方式

  • 开发工具中设置比如IDEA,eclipse
  • 运行jar包的时候:java -XX:+UseG1GC xxx.jar
  • web容器比如tomcat,可以在脚本中的进行设置
  • 通过jinfo实时调整某个java进程的参数(参数只有被标记为manageable的flags可以被实时修改)

1.7 实践和单位换算

1Byte(字节)=8bit(位)

1KB=1024Byte(字节)

1MB=1024KB

1GB=1024MB

1TB=1024GB

(1)设置堆内存大小和参数打印

​ -Xmx100M -Xms100M -XX:+PrintFlagsFinal

(2)查询+PrintFlagsFinal的值

​ :=true

(3)查询堆内存大小MaxHeapSize

​ := 104857600

(4)换算

​ 104857600(Byte)/1024=102400(KB)

​ 102400(KB)/1024=100(MB)

(5)结论

​ 104857600是字节单位

02 常用命令

2.1 jps

查看java进程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rJpEiMbx-1607941873732)(D:\software\typora\workplace\imgs_jvm\30.png)]

2.2 jinfo

  • a.实时查看和调整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.

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

jinfo -flag MaxHeapSize PID

jinfo -flag UseG1GC PID

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PO52kCH1-1607941873734)(D:\software\typora\workplace\imgs_jvm\31.png)]

  • c.修改

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

    jinfo -flag [+|-] PID

    jinfo -flag

  • d.查看曾经赋过值的一些参数

jinfo -flags PID

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gLYdDpU7-1607941873735)(D:\software\typora\workplace\imgs_jvm\32.png)]

2.3 jstat

  • a.查看虚拟机性能统计信息

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.

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7jVH3FTh-1607941873736)(D:\software\typora\workplace\imgs_jvm\33.png)]

  • c.查看垃圾收集信息
jstat -gc PID 1000 10

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qErkqODN-1607941873736)(D:\software\typora\workplace\imgs_jvm\34.png)]

2.4 jstack

  • a.查看线程堆栈信息

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

  • b.用法
jstack PID

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GC2Mnv3m-1607941873737)(D:\software\typora\workplace\imgs_jvm\35.png)]

2.5 jmap

  • a.生成堆转储快照

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

  • b.打印出堆内存相关信息
-XX:+PrintFlagsFinal -Xms300M -Xmx300M
jmap -heap PID

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PHObLybX-1607941873738)(D:\software\typora\workplace\imgs_jvm\36.png)]

  • c.dump出堆内存相关信息
jmap -dump:format=b,file=heap.hprof 44808

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0tlWy4Ve-1607941873739)(D:\software\typora\workplace\imgs_jvm\37.png)]

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

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

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath=heap.hprof

设置堆内存大小: -Xms20M -Xmx20M 启动,然后访问localhost:9090/heap,使得堆内存溢出

03 常用工具

3.1 jconsole

JConsole工具是JDK自带的可视化监控工具。查看java应用程序的运行概况、监控堆信息、永久区使用 情况、类加载情况等

命令行中输入:jconsole

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x9UCBE1a-1607941873740)(D:\software\typora\workplace\imgs_jvm\38.png)]

3.2 jvisualvm

a.监控本地Java进程

可以监控本地的java进程的CPU,类,线程等

b.监控远端Java进程

比如监控远端tomcat,演示部署在阿里云服务器上的tomcat

3.3 Arthas

github :https://github.com/alibaba/arthas

Arthas 是Alibaba开源的Java诊断工具,采用命令行交互模式,是排查jvm相关问题的利器。

3.4 MAT

Java堆分析器,用于查找内存泄漏
Heap Dump,称为堆转储文件,是Java进程在某个时间内的快照

下载地址 :https://www.eclipse.org/mat/downloads.php

3.5 GC日志分析工具

要想分析日志的信息,得先拿到GC日志文件才行,所以得先配置一下

根据前面参数的学习,下面的配置很容易看懂

  • 在线 http://gceasy.io
    断工具,采用命令行交互模式,是排查jvm相关问题的利器。

3.4 MAT

Java堆分析器,用于查找内存泄漏
Heap Dump,称为堆转储文件,是Java进程在某个时间内的快照

下载地址 :https://www.eclipse.org/mat/downloads.php

3.5 GC日志分析工具

要想分析日志的信息,得先拿到GC日志文件才行,所以得先配置一下

根据前面参数的学习,下面的配置很容易看懂

  • 在线 http://gceasy.io
  • GCViewer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mind_programmonkey

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值