内存泄漏是Linux系统中常见的问题,会导致系统性能下降甚至崩溃。以下是几种有效的内存泄漏检测方法:
top
# 或
htop
free -h
watch -n 1 free -h # 每秒刷新一次
vmstat 1 # 每秒刷新一次
pmap -x <PID> # 查看进程内存映射
cat /proc/<PID>/status # 查看进程内存状态
cat /proc/<PID>/maps # 查看内存映射详情
cat /proc/meminfo # 系统内存详细信息
valgrind --leak-check=full --show-leak-kinds=all ./your_program
gdb ./your_program
(gdb) run
# 程序崩溃后
(gdb) bt # 查看调用栈
#include <mcheck.h>
int main() {
mtrace(); // 开始跟踪
// 你的代码
muntrace(); // 结束跟踪
}
export MALLOC_TRACE=./memleak.log
./your_program
mtrace ./your_program $MALLOC_TRACE # 分析日志
# 需要内核配置CONFIG_DEBUG_KMEMLEAK=y
echo scan > /sys/kernel/debug/kmemleak # 触发扫描
cat /sys/kernel/debug/kmemleak # 查看结果
slabtop -o # 查看内核slab分配情况
dmesg | grep -i oom
journalctl -k | grep -i oom
通过以上方法的组合使用,可以有效地发现和定位Linux系统中的内存泄漏问题。