一.jvm参数
1.查看所有参数
java -XX:+PrintFlagsFinal -version
其中 "=“表示默认值,”:="表示被用户或JVM修改后的值
2.标准参数
-version
-help
-server
-cp
3.-X参数
非标准参数,即JDK各个版本中可能会变动
-Xint 解释执行
-Xcomp 第一次使用就编译成本地代码
-Xmixed 混合模式,JVM自己来决定
4.-XX参数
a.Boolean类型
格式:-XX:[±] +或-表示启用或者禁用name属性 比如:-XX:+UseConcMarkSweepGC 表示启用CMS类型的垃圾回收器
-XX:+UseG1GC 表示启用G1类型的垃圾回收器
b.非Boolean类型 格式:-XX=表示name属性的值是value 比如:-XX:MaxGCPauseMillis=500
5.其他参数
相当于是-XX类型的参数
-Xms1000等价于-XX:InitialHeapSize=1000
-Xmx1000等价于-XX:MaxHeapSize=1000
-Xss100等价于-XX:ThreadStackSize=100
二.设置参数的方式
1.开发工具中设置比如IDEA,eclipse
2.运行jar包的时候:java -XX:+UseG1GC xxx.jar
3.web容器比如tomcat,可以在脚本中的进行设置
4.通过jinfo实时调整某个java进程的参数(参数只有被标记为manageable的flags可以被实时修改)
三.常用命令
1.jinfo
a.jinfo -flag name PID 查看某个java进程的name属性的值
jinfo -flag MaxHeapSize PID
jinfo -flag UseG1GC PID
b,参数只有被标记为manageable的flags可以被实时修改
jinfo -flag [+|-] PID
jinfo -flag = PID
c.查看曾经赋过值的一些参数
jinfo -flags PID
2.jstat
a.查看虚拟机性能统计信息
b.查看类装载信息
jstat -class PID 1000 10 查看某个java进程的类装载信息,每1000毫秒输出一次,共输出10 次
c.查看垃圾收集信息
jstat -gc PID 1000 10
3.jstack
a.查看线程堆栈信息
b.jstack PID
c.应用于分析死锁
4.jmap
a.生成堆转储快照
b.打印出堆内存相关信息
-XX:+PrintFlagsFinal -Xms300M -Xmx300M
jmap -heap PID
c.dump出堆内存相关信息
jmap -dump:format=b,file=heap.hprof PID
d.发生堆内存溢出的时候,自动dump异常文件
JVM参数可以加上以下命令,这样内存溢出时,会自动dump出该文件
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=heap.hprof
四.常用工具
1.jconsole
JConsole工具是JDK自带的可视化监控工具。查看java应用程序的运行概况、监控堆信息、永久区使用 情况、类加载情况等。
2.jvisualvm
监控java进程的CPU,类,线程等
3.Arthas
Arthas 是Alibaba开源的Java诊断工具,采用命令行交互模式,是排查jvm相关问题的利器。
4.MAT
Java堆分析器,用于查找内存泄漏
Heap Dump,称为堆转储文件,是Java进程在某个时间内的快照
五.GC日志分析工具
1.gc日志
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps -Xloggc:gc.log
2.GCViewer
得到gc日志后,使用工具进行分析