目录
JVM参数及分析工具
JVM参数
标准参数
-version -help -server -cp
-X参数
非标准参数,在JDK各个版本中可能会变动
-Xint 解释执行 -Xcomp 第一次使用就编译成本地代码 -Xmixed 混合模式,JVM自己来决定
-XX参数
使用最多的参数类型,非标准化参数,主要用于JVM调优
1.Boolean类型
格式:-XX:[+-]<name> +或-表示启用或者禁用name属性
例子:-XX:UseConcMarkSweepGC 表示启用CMS类型的垃圾回收器 ,-XX:+UseG1GC 表示启用G1类型的垃圾回收器
2.非Boolean类型
格式: -XX<name>=<value> 表示name属性的值是value
例子:-XX:MaxGCPauseMillis=500 表示最大停顿时间
查看参数
java -XX:+PrintFlagsFinal -version > flags.txt
注意:“=”表示默认 “:=”表示被用户或JVM修改后的值
设置参数的方式
- 开发工具中设置,比如IDEA, eclipse
- 运行jar包的时候:java -XX:+UseG1GC xxx.jar
- web容器比如Tomcat,可以再脚本中进行设置
- 通过jinfo实时调整某个java进程的参数(仅被标记为manageable的flags可以被实时修改)
常用参数含义
常用命令
jps 查看java进程
jinfo
(1)实时查看和调整JVM配置参数
(2)查看 jinfo -flag name PID 查看某个java经常的name属性值
jinfo -flag MaxHeapSize PID
jinfo- flag UseG1GC PID
(3)修改
参数只有被标记为manageable的flags可以被实时修改
jinfo -flag [+|-] PID
jinfo -flag = PID
(4)查看曾经赋值的一些参数
jinfo -flags PID
jstat
(1)查看虚拟机性能的统计信息
(2)查看类装载信息 jstat -class PID 1000 10次 ->查看某个java进程的类装载信息,每1000毫秒输出一次,共输出10
(3)查看垃圾收集信息 jstat -gc PID 1000 10
jstack
(1)查看线程堆栈信息
(2)用法: jstack PID
(3)排查死锁
jmap
(1)生成堆转储快照
(2)打印出堆内存相关信息
jmap-heap PID
(3)
dump出堆内存相关信息 jmap -dump:format=b,file=heap.hprof PID
(4)堆溢出的时候自动dump出该文件
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof
一般
dump
下来的文件可以结合工具来分析
常用工具
jconsole
jvisualvm
可监控本地和远端
Arthas
Arthas
是
Alibaba
开源的
Java
诊断工具,采用
命令行交互模式
,是排查
jvm
相关问题的利器。
MAT
Java
堆分析器,用于查找内存泄漏
Heap Dump
,称为堆转储文件,是
Java
进程在某个时间内的快照。
它在触发快照的时候保存了很多信息:
Java
对象和类信息。
通常在写
Heap Dump
文件前会触发一次
Full GC
。
下载地址
:
https://www.eclipse.org/mat/downloads.php
GC日志分析工具
拿到GC日志文件
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps
-Xloggc:$CATALINA_HOME/logs/gc.log
在线的有 gceasy GCViewer