内存泄漏是指程序在分配内存后,由于设计错误或编码问题,未能正确释放不再使用的内存,导致可用内存逐渐减少的现象。在Linux系统中,这可能导致系统性能下降、应用程序崩溃甚至系统不稳定。
top/htop:实时查看内存使用情况
top
htop
free:查看内存和交换空间使用情况
free -h
vmstat:监控虚拟内存统计信息
vmstat 1 5 # 每秒一次,共5次
/proc/meminfo:详细内存信息
cat /proc/meminfo
pmap:查看进程内存映射
pmap -x <PID>
valgrind:强大的内存调试工具
valgrind --leak-check=full --show-leak-kinds=all ./your_program
gdb:GNU调试器
gdb ./your_program
malloc
都有对应的free
静态代码分析工具:
动态分析工具:
gcc -fsanitize=address -g your_program.c
python
import gc
gc.set_debug(gc.DEBUG_LEAK)
当发现内存泄漏导致系统不稳定时:
1. 使用ps aux --sort=-%mem
找出高内存进程
2. 必要时重启受影响的服务
3. 使用sysctl vm.drop_caches=3
清理缓存(临时措施)
4. 考虑设置内存限制(cgroups或ulimit)
通过以上方法和工具的综合应用,可以有效诊断、解决和预防Linux系统中的内存泄漏问题。