QT实战:Unix 系统内存异常排查

QT实战:Unix 系统内存异常排查快捷命令清单

本清单按排查流程 (整体状态→交换分区→高内存进程→内存泄漏→内核缓存)整理,适配 Linux、FreeBSD、Solaris 三大 Unix 分支,可直接复制执行,快速定位内存占用过高、内存泄漏等问题。

一、第一步:确认整体内存状态(判断是否真的内存不足)

系统 命令 作用 关键指标解读
Linux free -h 查看物理内存 / 交换分区整体使用 重点看available(实际可分配内存),若数值 < 1GB 则内存紧张;Swapused持续升高需警惕
Linux free -h -s 2 每 2 秒刷新内存状态(实时监控) 观察used/available的变化趋势,判断内存是否持续被占用
FreeBSD vmstat -h 查看内存分配 / 空闲及交换交互 fre为空闲物理内存,pi/po非零表示交换分区读写(持续非零则内存不足)
FreeBSD systat -m 交互式监控内存分页 / 缓存 直观查看内存各区域(缓存、进程占用、空闲)的动态变化
Solaris prtmem 查看物理内存分布(总 / 已用 / 内核占用) 区分用户进程和内核占用的内存,定位内存消耗主体
Solaris vmstat 1 5 每 1 秒输出 1 次,共 5 次(观察内存波动) swap列看交换分区使用,si/so非零表示内存与交换频繁交互

二、第二步:排查交换分区(判断是否因内存不足触发交换)

交换分区频繁读写会导致系统性能骤降,需优先验证:

系统 命令 作用 异常判定
Linux swapon --show 查看交换分区的路径、类型、大小 USED接近SIZE,且free -havailable极低,说明物理内存已耗尽
Linux cat /proc/swaps 查看交换分区详细信息(兼容老系统) -
FreeBSD swapinfo -h 人类可读格式显示交换分区使用 used占比 > 80% 为高危状态,需立即排查高内存进程
Solaris swap -l 列出所有交换分区 / 文件的使用情况 used列数值持续增长,且vmstatsi/so>0,说明内存严重不足

三、第三步:定位高内存进程(找到内存占用大户)

系统 命令 作用 筛选逻辑
Linux `top -b -n1 grep -E "PID %MEM"
Linux `ps aux --sort=-%mem head -10` 按内存占比排序,显示前 10 进程
FreeBSD `top -b -o res head -10` 按常驻内存(RES)排序,取前 10 进程
FreeBSD `ps aux -r -m head -10` 按内存使用率排序显示进程
Solaris prstat -s rss -n 10 按常驻内存(RSS)排序,显示前 10 进程 直接定位内存占用最高的进程,RSS为实际物理内存占用
Solaris `ps -eo pid,ppid,pmem,rss,args sort -rk4 head -10`

四、第四步:分析内存泄漏(排查进程内存持续增长问题)

内存泄漏表现为进程内存随时间递增,需持续监控:

系统 命令 作用 操作说明
Linux `watch -n 5 'ps aux --sort=-%mem grep <进程名> head -5'`
Linux pmap -x <PID> 查看指定进程的内存段分布(精准分析内存结构) 替换<PID>,重点看anon(匿名内存)是否异常增大(内存泄漏典型特征)
FreeBSD procstat -r <PID> 查看进程的内存映射和常驻内存详情 分析进程的内存段,判断是否存在无效内存堆积
Solaris pmap <PID> 显示进程的内存分区和占用大小 若某一内存段(如堆内存)持续增长且不释放,大概率是内存泄漏

五、第五步:验证内核缓存(区分缓存占用与实际内存不足)

Linux 的buff/cache是可回收内存,需排除缓存干扰:

系统 命令 作用 操作场景
Linux `cat /proc/meminfo grep -E "Cached Buffers
Linux echo 3 > /proc/sys/vm/drop_caches 手动释放内核缓存(需 root 权限) 执行后再用free -h查看available,若数值明显回升,说明之前是缓存占用导致的 "内存紧张"(非真不足)

六、补充:内核级内存排查(针对系统级内存异常)

适用于内核进程占用过高的场景(如驱动、内核模块泄漏):

系统 命令 作用 适用场景
Linux `cat /proc/meminfo grep -E "KernelStack Slab
Linux slabtop 交互式查看内核 slab 缓存的使用 c(缓存大小)排序,定位占用最高的内核缓存模块
FreeBSD sysctl vm.stats.vm 查看内核内存统计信息 分析内核内存分配的关键指标,判断内核是否异常占用

清单使用说明

  1. 排查顺序:按 "整体状态→交换分区→高内存进程→内存泄漏→内核缓存" 逐步定位,先排除缓存干扰,再找进程问题;

  2. 权限要求 :大部分命令需root权限(加sudo),尤其是内核级排查和缓存释放;

  3. 异常处置

  • 若为缓存占用:执行echo 3 > /proc/sys/vm/drop_caches释放(Linux);

  • 若为高内存进程:先重启进程,长期需优化程序或扩容内存;

  • 若为交换分区满载:临时关闭非核心进程,长期需增加物理内存。

(注:文档部分内容由 AI 生成)

相关推荐
17(无规则自律)7 天前
嵌入式 Linux 启动:设备树的加载、传递和解析全流程分析
linux·stm32·嵌入式硬件·unix
double2li8 天前
linux/unix 段错误捕获【续】
linux·运维·服务器·网络·unix
allway28 天前
Linux / Unix last Command Examples
linux·运维·unix
御坂10101号8 天前
「2>&1」是什么意思?半个世纪的 Unix 谜题
java·数据库·bash·unix
c++之路9 天前
Linux简介:从Unix到Linux的发展与核心体系
linux·运维·unix
艾莉丝努力练剑9 天前
【QT】常用控件(一):初识控件,熟悉QWidget
android·linux·数据库·qt·学习·mysql·qt5
似霰1 个月前
Unix Domain Socket —— UDP 篇
android·unix
陆业聪1 个月前
世界模型:让机器学会「脑补」
linux·服务器·unix
yuanmenghao1 个月前
Linux 性能实战 | 第 13 篇 虚拟内存与分页机制深度解析
linux·网络·性能优化·unix
The森1 个月前
Linux IO 模型纵深解析 01:从 Unix 传统到 Linux 内核的 IO 第一性原理
linux·服务器·c语言·经验分享·笔记·unix