JVM调优之常用的调优指令
# JVM调优之常用的调优指令
# 一、jmap
# 1、查看堆配置、堆使用信息 jmap -heap 14660`
# 2、查看实例个数和占用内存大小
-
jmap -histo 14660
#查看历史生成的实例 -
jmap -histo:live 14660
#查看当前存活的实例,执行过程中会触发一次full gc
# 3、堆内存dump
jmap ‐dump:format=b,file=eureka.hprof 14660
设置内存溢出自动导出dump文件(内存很大的时候,可能会导不出来)
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\jvm.dump
1
# 二、jstack
# 1、jstack pid:查看线程堆栈信息和死锁
- "Thread-1" 线程名
- prio=5 优先级=5
- tid=0x000000001fa9e000 线程id
- nid=0x2d64 线程对应的本地线程标识nid
- java.lang.Thread.State: BLOCKED 线程状态
# 2、查看占用CPU最高的线程
# 方法一:通过Liunx命令和JVM调优命令排查
通过
top
命令查看进程的资源占用情况再通过
top -H -p pid
命令查看进程中线程的资源占用情况将占用CPU最高的线程pid转16进制
printf '%x\n' 646 #输出 286
1
2通过
jstack
命令查看线程信息 jstack pid | grep -A 10 nidjstack 24 | grep -A 10 0x286
# 方法二:通过第三方工具 Arthas 排查
thread -n 3 -i 1000
: 列出 1000ms 内最忙的 3 个线程栈
# 三、jstat
命令的格式如下:
jstat [-命令选项] [vmid] [间隔时间(毫秒)] [查询次数]
# 1、查看GC统计 jstat -gc pid 1000 10
jstat -gcnew pid
新生代垃圾回收统计jstat -gcold pid
老年代垃圾回收统计
# 2、堆内存统计 jstat -gccapacity pid
jstat -gcnewscapacity pid
新生代内存统计jstat -gcoldcapacity pid
老年代内存统计
# 3、元数据空间统计 jstat -gcmetascapacity pid
MCMN
:最小元数据容量MCMX
:最大元数据容量MC
:当前元数据空间大小CCSMN
:最小压缩类空间大小CCSMX
:最大压缩类空间大小CCSC
:当前压缩类空间大小YGC
:年轻代垃圾回收次数FGC
:老年代垃圾回收次数FGCT
:老年代垃圾回收消耗时间GCT
:垃圾回收消耗总时间
# 四、jinfo
# 1、查看JVM的flags信息、查看命令行参数信息 jinfo -flags pid
java -XX:+PrintFlagsInitial 表示打印出所有参数选项的默认值
java -XX:+PrintFlagsFinal 表示打印出所有参数选项在运行程序时生效的值