使用 gdb 分析进程内存问题

使用 gdb 分析进程内存问题 正确方法一利用gcore直接对进程“搜魂”无须重启抓取最真实内存如果cri-docker进程目前已经吃了很多内存千万别重启。我们可以直接通过 Linux 的gcoreGNU 内存转储工具把该进程的全部内存直接“镜像”下来。sudo apt install gdb -y # Ubuntu/Debian # 或 sudo yum install gdb -y # CentOS/RHEL找到cri-dockerd的进程 PIDpidof cri-dockerd # 或者从你之前的系统日志看PID 是 56786抓取核心转储Core Dump文件# 这会把进程当前的 60G 内存生成一个映像文件确保目标磁盘空间足够 sudo gcore -o cri_docker_memory.dump cri-dockerd的PID使用viewcore或gdb进行离线账单分析拿到 dump 文件后可以在任何装有 Go 环境的开发机上使用 Go 官方的viewcore工具或者直接用 gdb来强行读取里面的 Goroutine 列表和内存堆栈# 查看当前内存里堆积的所有 Goroutine 状态 gdb /usr/bin/cri-dockerd cri_docker_memory.dump -ex thread apply all bt goroutines_track.log通过goroutines_track.log你可以直接肉眼看到几万个卡在exec、stream或network上的僵尸线程。gdb 介绍