Linux 内存持续增长_内存泄漏定位

冬敏酱_3962

冬敏酱_3962

2026-03-11

553人浏览

原创

Linux内存持续增长需先排除缓存,再分用户态(ps/pmap/ASan/jstat)和内核态(slabtop/perf/bpftrace)排查;关注MemAvailable、Slab、RSS等指标变化,结合cgroup、OOM日志等辅助定位。

linux 内存持续增长_内存泄漏定位

Linux 系统中内存持续增长,不一定是内存泄漏,但一旦排除缓存、缓冲区等正常占用后仍持续上涨,就需深入排查。关键在于区分 内核态内存增长 和 用户态进程内存泄漏,二者定位手段差异较大。

确认是否真为内存泄漏

先用基础命令观察内存使用趋势,避免误判:

  • free -h 查看整体内存(重点关注 available 是否持续下降,而非 used;Linux 会积极使用空闲内存作 page cache,这属于正常行为)
  • cat /proc/meminfo 检查 MemAvailable、Slab、PageTables、KernelStack 等字段变化,若 Slab 持续上涨,可能指向内核对象泄漏
  • watch -n 1 'ps aux --sort=-%mem | head -10' 观察用户进程 RSS 是否随时间单调上升(注意排除刚启动、正在加载数据的进程)

定位用户态进程内存泄漏

聚焦单个可疑进程,结合运行时与堆分析:

Linux Security Scanner
Linux Security Scanner

Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...

下载
  • pmap -x 查看进程各内存段大小,关注 anon 映射和堆([heap])是否持续扩大
  • /proc//smaps 中搜索 Size: 和 RSS:,按 mmapped 或 heap 区域筛选,用 awk 统计总和并定时采样对比
  • 对 C/C++ 程序,启用 AddressSanitizer(ASan) 重新编译运行:gcc -fsanitize=address -g test.c,可捕获堆内存越界、重复释放、泄漏等;运行后 ASan 会在退出时打印未释放内存摘要
  • Java 应用用 jstat -gc 观察老年代使用量是否持续增长且 Full GC 后不回落,再配合 jmap -histo:live 或 jcmd VM.native_memory summary 辅助判断

排查内核态内存异常增长

当 Slab、PageTables、PerCPU 等内核内存项持续上涨,需深入内核视角:

  • slabtop 实时查看 slab 缓存使用,重点关注 #objs 和 ObjSize 都大的缓存项(如 dentry、inode_cache、ext4_inode_cache),结合 ls -R /path 是否触发大量目录遍历可辅助验证
  • cat /sys/kernel/slab/*/alloc_calls 可定位高频分配的 slab 类型;grep -r "alloc" /sys/kernel/debug/slab/(需开启 slab_debug)进一步分析
  • 使用 perf 抓取内核内存分配栈:perf record -e kmem:kmalloc,kmem:kfree -a sleep 30,再用 perf script 查看高频分配点;对较新内核可尝试 memleak bpftrace 工具:sudo bpftrace -e 'kprobe:kmalloc { @bytes = hist(arg2); } interval:s:10 { print(@bytes); clear(@bytes); }'
  • 检查是否有异常模块加载或驱动 bug:用 lsmod 查最近加载模块,dmesg -T | grep -i "out of memory\|slab\|memory" 搜索内核日志线索

辅助手段与注意事项

提升排查效率的实用技巧:

  • 用 systemd-cgtop 或 cat /sys/fs/cgroup/memory/.../memory.usage_in_bytes 查看 cgroup 级别内存走势,确认是否某服务组整体失控
  • 对长期运行服务,设置 memory limit + OOMKill(如 systemd 的 MemoryMax=),配合日志观察是否被 kill,可反向锁定泄漏节奏
  • 避免在生产环境直接启用 slab_debug 或 KASAN,它们有显著性能开销;优先在复现环境测试
  • 注意 mmap(MAP_ANONYMOUS) 分配的大块内存不会计入进程 RSS,但算入 VirtualSize,需用 pmap 或 smaps 中 MMUPageSize 相关字段识别

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

457

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

980

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

3352

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

1096

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

989

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

514

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

3096

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

5812

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

887

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习