JVM调优工具

常用调优命令

Jmap -histo(进程的内存信息)

查看内存信息,实例个数以及占用内存大小
jmap -histo 线程id

jmap -histo 17086 > ./log.txt
将生成的信息输出到文件中

在这里插入图片描述
num:序号
instances:实例数量
bytes:占用空间大小
class name:类名称,[开头的为数组

Jmap -heap(查看堆信息)

直接查看:jmap -heap 17086 
导出到文件:jmap -dump:format=b,file=abc.hprof 17086 

堆内存信息
Heap Configuration 堆的配置信息
Heap Usage 堆的实际使用信息,以及各个区域的大小

也可以设置内存溢出自动导出dump文件(内存很大的时候,可能会导不出来)
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./ (路径)

Jstack(查找死锁)

Jstack 线程id

“Thread-1” 线程名
prio=5 优先级=5
tid=0x000000001fa9e000 线程id
nid=0x2d64 线程对应的本地线程标识nid
java.lang.Thread.State: BLOCKED 线程状态
在这里插入图片描述

jstack找出占用cpu最高的线程堆栈信息

1,使用命令top -p ,显示你的java进程的内存情况,pid是你的java进程号,比如19663
在这里插入图片描述

2,按H,获取每个线程的内存情况
在这里插入图片描述

3,找到内存和cpu占用最高的线程tid,比如19664
4,转为十六进制得到 0x4cd0,此为线程id的十六进制表示
5,执行 jstack 19663|grep -A 10 4cd0,得到线程堆栈信息中 4cd0 这个线程所在行的后面10行,从堆栈中可以发现导致cpu飙高的调用方法
在这里插入图片描述

6,查看对应的堆栈信息找出可能存在问题的代码

Jinfo(查看进程参数)

jinfo -flags 线程id

在这里插入图片描述

Jstat(查看堆内存信息)

jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下:
jstat [-命令选项] [vmid] [间隔时间(毫秒)] [查询次数]
注意:使用的jdk版本是jdk8

垃圾回收统计
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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值