JVM系列4-JVM参数以及工具
JVM参数
JVM参数分为四大类,标准参数、-X参数、-XX参数、其他参数
标准参数
不会随着Java版本的变化而变化
java -version
java -help
java -server
-cp
-X参数
非标准参数,也就是在JDK各个版本中可能会变动
-Xint # 解释执行
-Xcomp #第一次使用就编译成本地代码
-Xmixed #混合模式
-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
值得注意的是"="表示默认值,":="表示被用户或JVM修改后的值
# 打印所有JVM参数
jinfo -flags PID
设置参数方式
-
开发工具中设置比如IDEA,eclipse
-
运行jar包的时候:
java -XX:+UseG1GC xxx.jar
- web容器比如tomcat,可以在脚本中的进行设置
tomcat的bin目录下catalina.bat文件前面添加一行配置:
set JAVA_OPTS=-Xms2048m -Xmx2048m -Xss1024K
- 通过jinfo实时调整某个java进程的参数
参数只有被标记为manageable的flags可以被实时修改
常用命令
-
jps : 查看Java进程
-
jinfo: 实时查看和调整JVM参数
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
- 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日志分析工具
- 在线 : http://gceasy.io
- GCViewer
总结
解读下面的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之间 |