0%

springboot 内存占用定位

java 内存占用高

表现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看内存剩余
free -H

# 查看应用占用情况
top

## 查看占用内存的前3名进程
ps -aux | sort -k4nr | head -3

## 按cpu排序
ps -eo "%C : %p : %z : %a" --sort -%cpu

## 按内存排序
ps -eo "%C : %p : %z : %a" --sort -vsz

故障定位

  1. 查看具体项目内存占用
    top -p pid

    查看 java 开启的线程数
    top -H -p 22085

  2. heap 对象输出情况
    jmap -heap pid

  3. 获取 dump 文件
    jmap -dump:format=b,file=/root/roi-pay/pay.hprof 22085

  4. 大对象分析 - mat 工具 JDK11
    Reports -> Leak Suspects -> Problem Susppects -> Details -> See stacktrace

1
2
mysql 连接占用较大 mysql-cj-abandoned-connection-cleanup
nacos 客户端更新对象较大 com.alibaba.nacos.client.config.security.updater
  1. 或者 jhat pay.hprof 然后在浏览器中 localhost:7000 访问分析结果
  2. 或者 https://fastthread.io/ 上传分析

参考

  1. 内存分析工具-下载
  2. dump 文件查看
  3. 线上 Java 高 CPU 占用、高内存占用排查思路–待深入
  4. Java 内存占用分析–待深入