在 Debian(或其他 Linux 发行版)上排查进程内存泄漏,一般分三步:发现泄漏 → 定位代码/模块 → 确认原因。下面给你一套实用流程。
top
# 或
htop
重点看:
RES(常驻内存)VIRT(虚拟内存)如果 RES 持续上涨且不回落,大概率是泄漏。
也可以定时看:
watch -n 5 ps -o pid,rss,vsz,comm -p <PID>
free -h
buff/cache 高 ≠ 泄漏RSS 高且持续增长才是问题/proc/<pid>/statuscat /proc/<PID>/status
关注:
VmRSSVmSizeRssAnonpmap -x <PID>
看哪些内存段在涨(heap / mmap)。
sudo slabtop
如果是内核模块泄漏(驱动、文件系统),看 slab 增长。
适合开发/测试环境
sudo apt install valgrind
valgrind --tool=memcheck --leak-check=full ./your_program
优点:
缺点:
适合自己写的 C/C++ 程序
编译时加:
-g -fsanitize=address
运行后会直接报泄漏位置。
sudo apt install heaptrack
heaptrack ./your_program
heaptrack_gui heaptrack.*.gz
优点:
jemalloc + jeprofsudo apt install libjemalloc-dev
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2 ./program
malloc_stats_print
jmap -histo <PID>
jstat -gc <PID>
配合:
pip install memory_profiler
或:
objgraph
tracemalloc
node --inspect
用 Chrome DevTools 看 heap snapshot
dmesg | grep -i memory
sudo slabtop
如果是内核模块问题,需要:
kmalloc 使用✅ 进程 RSS 一直涨
✅ 重启后恢复正常
✅ valgrind / heaptrack 能复现
✅ 不是 cache/buffer
→ 基本可以确定是内存泄漏
你可以告诉我:
我可以直接给你最适合你场景的一条命令或方案。