JVM_07JVM调优工具详解
2023-03-27 11:23:51 13 举报
AI智能生成
JVM
作者其他创作
大纲/内容
JVM调优思路
JVM运行情况预估
jstat gc -pid 命令可以计算一些关键数据
youngGC次数
youngGC时间
fullGC次数
fullGC时间
需要考虑的jvm参数设置
堆内存大小
年轻代大小
Eden和Survivor的比例
老年代的大小
对象的阈值
关注年轻代对象增长的速率
命令 jstat -gc pid 1000 10,通过观察eden区的使用来估算每秒eden大概新增多少对象
不同的时间分别估算不同情况下对象增长速率
高峰期
日常运行期
关注Young GC的触发频率和每次耗时
Young GC的平均耗时 = YGCT/YGC
关注Full GC的触发频率和每次耗时
Full GC的平均耗时 = FGCT/FGC
总结
1.尽量让每次Young GC后的存活对象小于Survivor区域的50%,都留存在年轻代里
尽量别让对象进入老年代
尽量减少Full GC的频率,避免频繁Full GC对JVM性能的影响
常用调优命令
Jmap
此命令可以用来查看内存信息,实例个数以及占用内存大小
jmap -histo 线程号
jmap -histo 14660 #查看历史生成的实例
jmap -histo:live 14660 #查看当前存活的实例,执行过程中可能会触发一次full gc
展示内容
num:序号题
instances:实例数量
bytes:占用空间大小
class name:类名称,[C is a char[],[S is a short[],[I is a int[],[B is a byte[],[[I is a int[][]
jmap -heap
查看堆信息
jmap -heap 14460
展示内容
jmap -dump
查看堆内存dump
jmap -dump:format=b,file=eureka.hprof 14660
也可以设置内存溢出自动导出dump文件(内存很大的时候,可能会导不出来)
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./ (路径)
jvisualvm命令工具分析dump
Jstack
查看死锁信息
还可以用jvisualvm自动检测死锁
使用此命令查找占用CPU的线程
通过top -p <pid> ,显示你的java进程的内存情况
pid是你的java进程号
按H,获取每个线程的内存情况
H必须大写
找到内存和cpu占用最高的线程tid
进程号可以直接使用,而线程号需要转成16进制
执行 jstack 19663|grep -A 10 4cd0
这个命令的意思是通过jstack查看此进程下的线程命令,通过通道进行线程间的通信。
Jinfo
查看正在运行的Java应用程序的扩展参数
jinfo -flag 进程号
查看jvm的参数
jinfo -props 进程号
查看java系统参数
Jstat
可以查看堆内存各部分的使用量,以及加载类的数量
jstat [-命令选项] [vmid] [间隔时间(毫秒)] [查询次数]
例子:jstat -gc pid 1000 10 (每隔1秒执行1次命令,共执行10次)
常用命令
jstat -gc pid
查看程序内存使用及GC压力整体情况
S0C:第一个幸存区的大小,单位KB
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小(元空间)
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间,单位s
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间,单位s
GCT:垃圾回收消耗总时间,单位s
jastat -gccapacity pid
堆内存统计
full gc比minor gc还多的原因
元空间不够导致的多余full gc
老年代空间分配担保机制
显示调用System.gc()造成多余的full gc
0 条评论
下一页