JVM系列4-JVM参数以及工具

JVM参数

JVM参数分为四大类,标准参数、-X参数、-XX参数、其他参数

标准参数

不会随着Java版本的变化而变化

java -version 
java -help 
java -server 
-cp

-X参数

非标准参数,也就是在JDK各个版本中可能会变动

-Xint  # 解释执行
-Xcomp #第一次使用就编译成本地代码
-Xmixed #混合模式

image

-XX参数

使用得最多的参数类型
非标准化参数,相对不稳定,主要用于JVM调优和Debug

  • Boolean类型
    格式:-XX:[+-]name ; +或-表示启用或者禁用name属性
-XX:+UseConcMarkSweepGC  # 表示启用CMS类型的垃圾回收器
-XX:+UseG1GC      #表示启用G1类型的垃圾回收器
  • 非Boolean类型
    格式:-XX:name=value 表示name属性的值是value
-XX:MaxGCPauseMillis=500  #表示GC最大的停顿时间500毫秒

其他参数

-Xms1000  #等价于 -XX:InitialHeapSize=1000 
-Xmx1000  #等价于 -XX:MaxHeapSize=1000 
-Xss100   #等价于 -XX:ThreadStackSize=100

查看JVM参数

将JVM参数打印到指定文件

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

image

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

# 打印所有JVM参数
jinfo -flags PID

image

设置参数方式

  1. 开发工具中设置比如IDEA,eclipse
    image

  2. 运行jar包的时候:

java -XX:+UseG1GC xxx.jar
  1. web容器比如tomcat,可以在脚本中的进行设置
    tomcat的bin目录下catalina.bat文件前面添加一行配置:
set JAVA_OPTS=-Xms2048m -Xmx2048m -Xss1024K
  1. 通过jinfo实时调整某个java进程的参数

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

常用命令

  • jps : 查看Java进程
    image

  • jinfo: 实时查看和调整JVM参数
    image

PID: jps查看, -UseG1GC表示未使用G1收集器, +表示使用。

-- 查看
jinfo -flag MaxHeapSize PID
jinfo -flag UseG1GC PID
-- 实时修改
jinfo -flag name=value PID
  • jstat : 查看虚拟机性能统计信息
# 查看某个java进程的类装载信息,每1000毫秒输出一次,共输出10 次
jstat -class PID 1000 10  
# 查看垃圾收集信息
jstat -gc PID 1000 10

image

  • jstack : 查看线程堆栈信息
    排查线程中的问题,比如死锁
jstack PID
  • jmap : 生成堆内存的快照
    生产环境OOM的时候 把堆内存快照导出来

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

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

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

dump下来的文件可以使用工具查看

常用工具

jconsole

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

jvisualvm

  • 监控本地Java进程
  • 监控远端Java进程

Arthas

github :https://github.com/alibaba/arthas
Arthas 是Alibaba开源的Java诊断工具,采用命令行交互模式,是排查jvm相关问题的利器。

MAT

Java堆分析器,用于查找内存泄漏
Heap Dump,称为堆转储文件,是Java进程在某个时间内的快照
下载地址 :https://www.eclipse.org/mat/downloads.php

GC日志分析工具

总结

解读下面的VM参数配置含义

-XX:+PrintGCDetails -XX:+UseSerialGC -Xmx100m -Xms100m -Xss512k -XX:SurvivorRatio=4 -XX:NewRatio=4 -XX:MaxTenuringThreshold=15 
命令 含义
-XX:+PrintGCDetails 打印具体GC日志
-XX:+UseSerialGC 使用串型垃圾收集器
-Xmx100m JVM最大堆内存
-Xms100m JVM初始堆内存
-Xss512k 每个线程的堆栈大小
-XX:SurvivorRatio=4 - 新生代Edon区 S0、S1区比例:4:1:1
-XX:NewRatio=4 新生代 老年代比例。老年代4 新生代1。老年代占4/5
-XX:MaxTenuringThreshold=15 设置垃圾最大年龄 0-15之间
posted @ 2021-09-20 01:30  狻猊的主人  阅读(160)  评论(0编辑  收藏  举报