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 #输出 2861
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 表示打印出所有参数选项在运行程序时生效的值
# 2、查看Java系统属性信息 jinfo -sysprops pid

# 五、思维导图
