本篇命令大部分为jdk命令,需要在jdk环境下使用
>文件名 2>&1
将控制台信息 持久化
查看java程序进程id
jps
查看gc信息
基本命令
jstat -gc [pid]
jstat -gcutil [pid]
jstat -gccapacity [pid]
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取代了。(永久代)
查看JVM内存信息
查看配置和使用信息
基本命令
jmap [pid]
jmap -heap [pid]
linux上的特殊使用
jmap -heap `jps | grep DataNode | awk '{print $1}'`
查看堆信息
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
输出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
装载dump文件
执行栈
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
vmstat
uptime
I/O资源
iostat -x > ./iostat.dump 2>&1
此命令可以输出每块磁盘的基本性能信息,用来排查I/O问题,比如日志输出过多,或者磁盘问题等。
内存资源
free -h > ./free.dump 2>&1
free命令能够大体展现操作系统内存状况
其他全局
# 最常用的ps
ps -ef > ./ps.dump 2>&1
# dmesg是挂掉的一些服务留下的一些信息
dmesg > ./dmesg.dump 2>&1
# 输出内核信息
sysctl -a > ./sysctl.dump 2>&1
评论区