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

一、第一步:确认整体内存状态(判断是否真的内存不足)
| 系统 | 命令 | 作用 | 关键指标解读 |
|---|---|---|---|
| Linux | free -h |
查看物理内存 / 交换分区整体使用 | 重点看available(实际可分配内存),若数值 < 1GB 则内存紧张;Swap的used持续升高需警惕 |
| 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 -h中available极低,说明物理内存已耗尽 |
| Linux | cat /proc/swaps |
查看交换分区详细信息(兼容老系统) | - |
| FreeBSD | swapinfo -h |
人类可读格式显示交换分区使用 | used占比 > 80% 为高危状态,需立即排查高内存进程 |
| Solaris | swap -l |
列出所有交换分区 / 文件的使用情况 | used列数值持续增长,且vmstat中si/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 |
查看内核内存统计信息 | 分析内核内存分配的关键指标,判断内核是否异常占用 |
清单使用说明
-
排查顺序:按 "整体状态→交换分区→高内存进程→内存泄漏→内核缓存" 逐步定位,先排除缓存干扰,再找进程问题;
-
权限要求 :大部分命令需
root权限(加sudo),尤其是内核级排查和缓存释放; -
异常处置:
-
若为缓存占用:执行
echo 3 > /proc/sys/vm/drop_caches释放(Linux); -
若为高内存进程:先重启进程,长期需优化程序或扩容内存;
-
若为交换分区满载:临时关闭非核心进程,长期需增加物理内存。

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