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