使用top(按M键按内存排序)、htop(更直观的进程监控)或ps aux --sort=-%mem命令,查看系统中占用内存最高的进程,初步定位可能存在内存泄漏的进程(如内存使用持续增长且不释放)。
通过pmap -x <PID>命令(<PID>为目标进程ID),查看进程的内存映射详情(包括堆、栈、共享库等内存区域的使用情况),重点关注RSS(常驻内存集,实际使用的物理内存)或Anonymous(匿名内存,如堆内存)的异常增长,辅助判断内存泄漏的大致区域。
valgrind(sudo yum install valgrind)后,使用valgrind --leak-check=full ./your_program命令运行程序,生成详细的内存泄漏报告(包含泄漏内存的大小、位置及类型,如“definitely lost”表示确定泄漏)。CONFIG_DEBUG_KMEMLEAK=y),通过echo 1 > /sys/kernel/debug/kmemleak开启检测,cat /sys/kernel/debug/kmemleak查看泄漏报告(需root权限)。free/delete)、关闭文件描述符(close)、移除不再使用的事件监听器(如Node.js中的removeListener)。PM2(Node.js)、Supervisor等进程管理工具,配置自动重启策略(如PM2的--watch模式监控文件变化并重启),在进程因内存泄漏崩溃时自动恢复,降低故障影响。Redis、Memcached),避免进程自身缓存占用过多内存;定期清理系统缓存(sync; echo 3 > /proc/sys/vm/drop_caches,需root权限)。htop、vmstat 1(每秒刷新虚拟内存统计)、sar -r 1(系统活动报告,内存使用趋势)等工具,实时跟踪系统内存使用情况。Prometheus+Grafana、Nagios等监控系统,设置内存使用阈值(如某进程内存占用超过80%持续5分钟),触发邮件/短信告警,及时介入处理。ulimit -v <虚拟内存上限>(如ulimit -v 1048576限制为1GB)命令,限制单个进程的虚拟内存使用量,防止单个进程耗尽系统内存。cgroups(控制组)创建内存限制组(如sudo cgcreate -g memory:/mygroup),设置内存上限(echo 100M > /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes),将目标进程加入组(echo <PID> > /sys/fs/cgroup/memory/mygroup/tasks),超出限制时自动终止进程。sudo yum update),修复已知的内存泄漏漏洞(如软件开发商发布的安全补丁)。