2021-09-16

解决Linux下的CUP飙升、内存溢出以及GC不健康

一、Linux下的CUP飙升、内存溢出问题

-- 先执行top命令 查询cup使用情况 然后按Shift + m 进行一个倒序排序 查询出使用最高的pid
top 
-- 然后执行 top -Hp pid 命令查询出该进程下的线程信息,查询出使用最高的线程id
top -Hp pid
-- 把 线程id 转换成 16进制
printf "%x\n" id 
-- 方法一 通过 jstack(JDK自带的命令) 打印相关的信息
jstack pid | grep -A 10 id // grep 命令后面的信息相当于查询条件 -A 报错后面的 10 行信息
-- 方法二 
jstack -l pid > out.txt // 导出所有的信息然后根据 线程id 去查找对应的信息

二、GC不健康问题

1、gc 堆内存信息分析
-- jstat 命令
jstat -gc pid 1000 // 每隔 一秒钟打印一次GC 使用信息

-- jmap -heap 命令
jmap -heap pid  或者 jmap -heap pid > out.text(打印文件输出); 
// 堆内存使用情况 能 看到堆内存分配的空间 以及使用 情况

-- jmap -histo 命令
jmap -histo pid 或者 jmap -histo pid > out.txt;
// 打印或导出堆内存中对象的数量及大小

-- jmap -dump:file=c:dump.txt pid命令
jmap -dump:file=c:dump.txt pid 
// 输出以dump文件格式  然后通过特定的工具分析dump文件信息

上一篇:常用JDK命令


下一篇:Java jps、jstat、jinfo、jmap、jhat、jstack工具介绍