0

0

Linux内存占用异常怎么分析_进程级排查方法【技巧】

冷漠man

冷漠man

发布时间:2025-12-19 20:04:02

|

955人浏览过

|

来源于php中文网

原创

快速定位高内存进程应先用htop或top按内存排序查看RES和%MEM,再用ps命令抓取前10名;深入分析需检查/proc/PID/status、pmap和smaps;注意区分真实占用与缓存,结合free、vmstat、smem和slabtop综合判断,并通过watch、日志采样及专用工具验证趋势与泄漏。

linux内存占用异常怎么分析_进程级排查方法【技巧】

快速定位高内存进程

先用交互式工具一眼看出谁在“吃”内存。运行 htop(如未安装,sudo apt install htopsudo dnf install htop),默认就按内存从高到低排序,RES 列代表实际占用的物理内存,%MEM 是占比,比对两者更准——有些进程 RES 高但 %MEM 低,可能是系统总内存大、单个进程占比不显眼。

若只能用基础环境,top 同样有效:启动后按 Shift + M(大写 M)切换至内存排序;再按 u 可筛选指定用户,k 可杀进程(务必确认后再操作)。

非交互场景下,用 ps 一键抓取前 10 名:

  • ps aux --sort=-%mem | head -n 10 —— 看整体内存占比排名
  • ps -eo pid,comm,%mem,rss,vsize --sort=-rss | head -n 10 —— 更关注实际物理内存(RSS)占用

深入看单个进程的内存构成

找到可疑 PID 后,别只盯 RSS。Linux 进程内存分得很细,关键要看它到底用了什么类型的内存:

  • cat /proc/<PID>/status | grep -i "vm\|rss\|anon\|file" 重点关注:VmRSS(等同 RES)、RssAnon(堆/等匿名内存)、RssFile(共享库、mmap 文件等)
  • pmap -x <PID> —— 显示每段内存的大小、权限和映射来源,能快速识别是否某块 mmap 区域异常膨胀
  • cat /proc/<PID>/smaps | awk '/^Size:/ {sum+=$2} END {print sum}' —— 统计该进程总虚拟内存(KB),辅助判断是否地址空间失控

特别注意:如果 RssAnon 远高于 RssFile,且持续增长,大概率是堆内存泄漏;如果 RssFile 占比极高,可能是缓存了大量文件或共享库加载异常。

零沫AI工具导航
零沫AI工具导航

零沫AI工具导航-AI导航新标杆,探索全球实用AI工具

下载

区分“真占”和“假高”:缓存、共享与可回收性

看到 free -h 显示 used 很高,别急着杀进程。Linux 会把空闲内存自动用于 buff/cache,这部分在应用需要时会立即释放:

  • free -h 中重点看 available 值——这才是真正可分配给新进程的内存
  • 若 available 很低,再查 vmstat 1 5:持续出现 si > 0(swap in)或 so > 0(swap out),说明物理内存已严重不足,开始频繁换页
  • 共享内存(SHR)在 top/htop 中会重复计算,用 smem 更准:smem -s rss -r | head -n 10 显示 PSS(按比例分摊后的实际开销)

另外,slab 缓存(尤其是不可回收的 dentry/inode)也可能悄悄吃掉大量内存:slabtop -o | head -n 20 查看 top 占用 slab 的对象。

辅助验证与长期观察

单次快照容易误判,建议结合时间维度确认趋势:

  • watch -n 2 'free -h' 每 2 秒刷新一次,观察 available 是否持续下降
  • 记录一段时间内 top 内存进程变化:top -b -n 3 -d 5 | grep -A 10 "%MEM" > mem.log(采样 3 次,间隔 5 秒)
  • 怀疑内存泄漏又无法停服务?可用 valgrind --tool=memcheck --leak-check=full --log-file=valgrind.log ./your_program 在测试环境复现(生产慎用)

对于 Java、Node.js 等运行时环境,还需结合其自身工具:jstat、jmap 或 process.memoryUsage(),不能只依赖系统层指标。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

193

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

19

2026.02.03

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

409

2023.09.04

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

446

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

605

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

446

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

605

2023.08.10

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

531

2023.06.20

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.6万人学习

Git 教程
Git 教程

共21课时 | 4.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号