应用程序内存泄漏
内核内存泄漏
系统配置问题
# 查看系统内存概况
free -h
# 监控内存变化
vmstat -S M 1
# 查看内存使用详情
cat /proc/meminfo
# 按进程查看内存使用
top -o %MEM
Valgrind (适用于应用程序)
valgrind --leak-check=full --show-leak-kinds=all ./your_application
pmap (查看进程内存映射)
pmap -x <PID>
strace (跟踪系统调用)
strace -f -e trace=mmap,munmap,brk -p <PID>
GDB (调试工具)
gdb -p <PID>
# 查看slab分配情况
cat /proc/slabinfo
# 查看内存分配统计
cat /proc/buddyinfo
# 使用kmemleak检测内核内存泄漏
echo scan > /sys/kernel/debug/kmemleak
调整swappiness:
echo 10 > /proc/sys/vm/swappiness
设置内存限制:
ulimit -v <memory_limit_in_kb>
使用cgroups限制内存:
cgcreate -g memory:mygroup
cgset -r memory.limit_in_bytes=500M mygroup
透明大页(THP):
echo never > /sys/kernel/mm/transparent_hugepage/enabled
内存压缩(zswap/zram):
modprobe zram
echo lz4 > /sys/block/zram0/comp_algorithm
内存回收调优:
echo 50 > /proc/sys/vm/vfs_cache_pressure
echo 1000 > /proc/sys/vm/dirty_writeback_centisecs
通过系统化的排查方法和适当的解决方案,可以有效识别和修复Linux系统中的内存泄漏问题。