一、JVM参数
1、标准参数
-version
-help
-server
-cp
2、-X参数
非标准参数,在JDK各个版本中可能会变动
3、-XX参数
非标准化参数,相对不稳定,主要用于JVM调优和Debug
a.Boolean类型格式:
-XX:[+-]<name>+或-表示启用或者禁用name属性比如:
-XX:+UseConcMarkSweepGC表示启用CMS类型的垃圾回收器
-XX:+UseG1GC表示启用G1类型的垃圾回收器
b.非Boolean类型格式:
-XX<name>=<value>表示name属性的值是value
比如:-XX:MaxGCPauseMillis=500
4、其他参数
-Xms1000等价于-XX:InitialHeapSize=1000
-Xmx1000等价于-XX:MaxHeapSize=1000
-Xss100等价于-XX:ThreadStackSize=100
5、查看参数
java -XX:+PrintFlagsFinal -version 或 java -XX:+PrintFlagsFinal -version > flags.txt 查看JVM参数
值得注意的是"="表示默认值,":="表示被用户或JVM修改后的值要想查看某个进程具体参数的值,可以使用jinfo,这块后面聊一般要设置参数,可以先查看一下当前参数是什么,然后进行修改
查询出来的单位是字节(KB)
二、常用命令:
1、jps 查看Java进程
执行 jps 或 jps -l 找到PID
2、jinfo
(1)实时查看和调整JVM配置参数
jinfo -flag name PID 查看某个java进程的name属性的值
jinfo -flag MaxHeapSize PID
jinfo -flag UseG1GC PID
参数只有被标记为manageable的flags可以被实时修改。
3、jstat
(1)查看虚拟机性能统计信息
(2)查看类装载信息
jstat -class PID 1000 10查看某个java进程的类装载信息,每1000毫秒输出一次,共输出10次
(3)查看垃圾收集信息
jstat -gc PID 1000 10
4、jstack
(1)查看线程堆栈信息
The jstack command prints Javastacktraces of Java threads for a specified Java process,core file,or remote debug server.
jstack PID 可以排查线程死锁
5、jmap
(1)生成堆转储快照
(2)打印出堆内存相关信息
-XX:+PrintFlagsFinal -Xms300M -Xmx300M
jmap -heap PID
(3)dump出堆内存相关信息
jmap -dump:format=b,file=heap.hprof PID
一般在开发中,JVM参数可以加上下面两句,这样内存溢出时,会自动dump出该文件
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof