首页/系统/Linux 运维命令速查/场景:定位内存占用大户
进程与作业69 条

场景:定位内存占用大户

内存告警先分清「真占用还是缓存」:free -m 看 available、top 按内存排、pmap 看进程内存构成,OOM 前及时处置。

Linux 运维命令速查系统更新于 2026-10-13

这条路径解决什么

内存告警出现时,第一步不是清理,而是分清「真的不够用」还是「看着满其实可回收」:Linux 会把空闲内存用作页缓存,free 一列经常很低并不等于告急,要看 available。确认紧张之后,再按进程定位大户,最后判断是配置问题、泄漏问题还是被 OOM 终止后的现场。

基本信息

适用场景内存告警、进程被 OOM 终止、系统开始换页
关键工具free、top、ps、pmap、smaps_rollup、vmstat、dmesg
核心判据available 是否充足、是否发生换入换出(si 与 so)、是否有 OOM 记录
处置方向限制单进程内存、调整数量与并发、必要时扩容;清理缓存通常不是解法

典型使用场景

  • 整机内存告警:先看 available 与 swap 使用,判断是否真紧张
  • 进程被突然终止:确认是不是被 OOM 杀掉的
  • 排查内存泄漏:按时间多次采样同一进程的内存,看是否持续增长
  • 容器与 JVM 场景:确认堆大小与容器限额是否匹配
  • 救火处置:定位到具体进程后先限流或重启,再谈根因

快速判断

快速判断
free -m                                # 重点看 available,不要只看 free 列
top -b -n1 -o %MEM | head -15          # 按内存占用排序
ps -eo pid,pmem,rss,cmd --sort=-rss | head -10
vmstat 1 5                             # 看 si 与 so 是否在换入换出

深入单个进程

深入单个进程
pmap -x 1234 | tail -3                # 该进程的内存地址空间构成
cat /proc/1234/smaps_rollup | head     # PSS 更贴近实际占用
cat /proc/1234/status | grep -E 'VmRSS|VmSwap|VmPeak'
cat /proc/1234/cgroup                  # 看它属于哪个 cgroup 限额

确认是否被 OOM 终止

确认是否被 OOM 终止
dmesg -T | grep -i 'killed process' | tail -n 5
dmesg -T | grep -i 'out of memory' | tail -n 5
journalctl -k --since today --no-pager | grep -i oom | tail -n 20

内存指标读法

指标含义怎么看
total 与 used物理内存总量与已用used 含内核与共享部分,不直接等于进程占用
free完全空闲的内存数值低很常见,单独看不说明问题
available估计可分配给新进程的内存这才是判断是否紧张的依据
buff/cache页缓存与缓冲区可回收,不是泄漏
VmRSS进程常驻内存多进程共享的库会重复计入,偏高未必真占那么多
PSS按比例分摊后的占用多进程对比与容器计量更准确
si 与 so每秒换入与换出量持续非零说明内存确实不够用了
进程被突然终止且退出码为 137,通常意味着收到 KILL 信号,最常见来源就是内核的 OOM 终止器。用 dmesg 里带 killed process 的记录能看到被杀进程名与内存占用,这就是最直接的证据。
不要用「清缓存」(写 /proc/sys/vm/drop_caches)来应对内存告警:页缓存是可回收的,丢掉它只会让后续读写变慢,真正的问题仍在。同理,swap 使用率高但 si 与 so 长期为 0,通常只是早前换出后一直没换回来的页,不必紧张。

易错点

  • free 列出的 buff/cache 是可回收的:available 足够就不算真告急,别急着清缓存
  • swap 使用率高但 si 与 so 为 0 通常无害,要动态看 vmstat 的换入换出再判断
  • VmRSS 会把共享库重复计算,多进程对比时应优先看 PSS 或 smaps_rollup
  • 只看当前快照无法判断泄漏:要在几个时间点采样同一进程的内存并比较趋势
  • 容器里被 OOM 杀掉的进程在宿主机 dmesg 中显示的是宿主 PID 与 cgroup 名,不要按容器内 PID 去对号

数据来源与参考

  • man 1 free(procps-ng 手册)
  • man 5 proc

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌