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

相关推荐
蓝天智能11 小时前
QT实战:Unix下vi编辑器常用命令速查表
编辑器·unix
蓝天智能11 小时前
Qt实战:Unix_Linux下QTableView Checkbox不显示?问题排查+样式定制全攻略
linux·qt·unix
询问QQ688238861 天前
基于Matlab的蓝色车牌识别系统(进阶版):车牌定位与识别技术实战
unix
Unlyrical2 天前
为什么moduo库要进行线程检查
linux·服务器·开发语言·c++·unix·muduo
GIS阵地2 天前
Qt实现简易仪表盘
开发语言·c++·qt·pyqt·qgis·qt5·地理信息系统
Bigan(安)3 天前
【奶茶Beta专项】【LVGL9.4源码分析】04-OS抽象层
linux·c语言·mcu·arm·unix
Bigan(安)3 天前
【奶茶Beta专项】【LVGL9.4源码分析】06-tick时间管理
linux·c语言·mcu·arm·unix
kyle~5 天前
Linux---<unistd.h>类Unix系统编程核心头文件
linux·运维·unix
AI-嘉文哥哥7 天前
ADAS自动驾驶-前车碰撞预警(追尾预警、碰撞检测)系统
人工智能·深度学习·yolo·目标检测·数据分析·课程设计·qt5