侧边栏壁纸
博主头像
丛庆

没事儿写代码,有事写代码。email:1024@cong.zone

  • 累计撰写 116 篇文章
  • 累计创建 97 个标签
  • 累计收到 4 条评论

【Java】【JVM】【JDK命令】常用的jdk命令,jvm排查

丛庆
2021-11-05 / 0 评论 / 1 点赞 / 771 阅读 / 2,316 字 / 正在检测是否收录...
温馨提示:
部分资料和图片来源于网络,如有危害到您的利益请与我联系删除,1024@cong.zone。

本篇命令大部分为jdk命令,需要在jdk环境下使用
>文件名 2>&1
将控制台信息 持久化

查看java程序进程id

jps

image-1650937211271

查看gc信息

基本命令

jstat -gc [pid]
jstat -gcutil [pid]
jstat -gccapacity [pid] 

image-1650993514239
linux上的特殊使用

jstat -gcutil [pid] > ./jstat-gcutil.dump 2>&1
jstat -gccapacity [pid] > ./jstat-gccapacity.dump 2>&1
jstat -gc `jps | grep DataNode | awk '{print $1}'`

jstat -gc 参数说明
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

旧版本的的PC 和PU被MC MU取代了。(永久代)
image-1650937353992

查看JVM内存信息

查看配置和使用信息

基本命令

jmap [pid]
jmap -heap [pid]

linux上的特殊使用

jmap -heap `jps | grep DataNode | awk '{print $1}'`

image-1650938784287

查看堆信息

jmap -histo `jps | grep DataNode | awk '{print $1}'`

配合linux命令使用

# 查看前15行
jmap -histo pid | head -n 15
# 查看对象数最多的对象,按降序输出
jmap -histo  pid | sort -k 2 -g -r 
# 查看内存的对象,按降序输出
jmap -histo pid | sort -k 3 -g -r 

image-1650939011772

image-1650939508021

image-1650939576303

输出dump文件

jmap -dump:format=b,file=dump.bin [pid]
# 输出所有的对象
jmap -dump:format=b,file=dump.bin `jps | grep DataNode | awk '{print $1}'`
# 输出存活的对象
jmap -dump:live,format=b,file=dump.bin [pid]

dump.bin 为输出的文件名称

dump的使用方式

最好在windows或mac等支持jdk的ui系统上使用jvisualvm.exe解析文件

在配置了jdk环境变量的Windows系统上使用
打开 cmd 输入

jvisualvm.exe

image-1650940062837
装载dump文件
image-1650940219002

执行栈

jstack [pid]
# 产看某个进程中线程的信息
top -Hp [pid] -b -n 1 -c
# 持久化
top -Hp [pid] -b -n 1 -c >  ./top-[pid].dump 2>&1

java进程无响应

jstack无响应

kill -3 [pid]

java进程几乎不响应等很多原因导致jstack并不能够运行。向进程发送kill -3信号。将会打印jstack的trace信息到日志文件中

jmap无响应

gcore -o 。/core [pid]

当jmap无法执行时,使用GDB组件中的gcore。生成一个core文件。
再使用如下的命令去生成dump
``
jhsdb jmap --exe java --core ./core --binaryheap



## jvm进程快照

jinfo [pid] > ./jinfo.dump 2>&1

# linux系统级环境相关命令
## 当前网络连接快照
```sh
ss -antp > ./ss.dump 2>&1

该命令可以将系统的全部网络连接保存到ss.dump文件中。
在网络连接较多的情况,ss的性能强于netstat

网络状态统计

netstat -s > ./netstat-s.dump 2>&1

将瞬时网络统计,保存到netstat-s.dump文件。

sar -n DEV 1 2 > ./sar-traffic.dump 2>&1

sar可以输出当前的网络流量。在一些速度非常高的程序上,比如redis、kafka,就经常发生占用大量带宽的情况

进程资源

lsof -p [pid] > ./lsof-[pid].dump

查看进程打开了哪些文件,这是一个神器,可以以进程的维度查看系统资源的使用情况。
在资源多的情况下,输出较慢。

CPU资源

mpstat > ./mpstat.dump 2>&1
vmstat 1 3 > ./vmstat.dump 2>&1
uptime > ./uptime.dump 2>&1

mpstat
image-1650992750259

vmstat
image-1650992777641

uptime
image-1650992927450

I/O资源

iostat -x > ./iostat.dump 2>&1

此命令可以输出每块磁盘的基本性能信息,用来排查I/O问题,比如日志输出过多,或者磁盘问题等。

内存资源

free -h > ./free.dump 2>&1

free命令能够大体展现操作系统内存状况
image-1650993047738

其他全局

# 最常用的ps
ps -ef > ./ps.dump 2>&1
# dmesg是挂掉的一些服务留下的一些信息
dmesg > ./dmesg.dump 2>&1
# 输出内核信息
sysctl -a > ./sysctl.dump 2>&1
1

评论区