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 生成)

相关推荐
郭涤生20 小时前
第二章_UNIX标准及实现_《UNIX环境高级编程(第三版)》_笔记
unix
郭涤生21 小时前
第一章_UINX基础知识_《UNIX 环境高级编程(第三版)》_笔记
网络·unix
我在人间贩卖青春5 天前
Unix和Linux简史及标准化
linux·unix
齐鲁大虾6 天前
UOS(统信操作系统)如何更新CUPS(通用Unix打印系统)
linux·服务器·chrome·unix
wregjru7 天前
【操作系统】2.用户和权限
linux·服务器·unix
微尘hjx12 天前
【目标检测软件 02】AirsPy 目标检测系统操作指南
人工智能·测试工具·yolo·目标检测·计算机视觉·目标跟踪·qt5
race condition12 天前
UNIX网络编程笔记 信号处理
笔记·unix·信号处理
李斯维14 天前
第18章 过滤器:统计和格式化
linux·bash·unix
2401_8582861114 天前
OS39.5.【Linux】分析ar命令生成的归档文件的格式
linux·ar·unix
Jack___Xue16 天前
LangChain实战快速入门笔记(六)--LangChain使用之Agent
笔记·langchain·unix