目录

CentOS 7 查看进程内存占用的 3 种实用方法(top、pmap、ps 详解)

title = “CentOS 7 查看进程内存占用的 3 种实用方法(top、pmap、ps 详解)” description = “详细介绍 CentOS 7 下使用 top、pmap、ps 三种命令查看进程内存占用的方法,包含各字段含义解读、实战用法和排序技巧,帮你快速定位内存异常进程,提升 Linux 运维效率。” keywords = “CentOS 7 查看进程内存, Linux 查看内存占用, top 命令, pmap 命令, ps 查看内存, 进程内存排序, Linux 运维” categories = [“编程开发”] tags = [“CentOS 7”,“Linux 运维”,“进程管理”,“内存监控”,“top 命令”,“pmap 命令”,“ps 命令”] slug = “centos7-check-process-memory-usage” date = “2026-05-22” lastmod = “2026-05-22” summary = "" draft = false type = “posts” weight = 0 include_toc = false show_comments = true


CentOS 7 查看进程内存占用的 3 种实用方法

在日常的 Linux 服务器运维中,内存不足或某个进程内存泄漏是最常遇到的问题之一。尤其在 CentOS 7 环境下,快速准确地定位哪个进程吃掉了大量内存,对于保障服务稳定运行至关重要。

本文将围绕 toppmapps 这三个核心命令,手把手教你如何在 CentOS 7 中查看进程的内存消耗情况,并分享一些实用的排序和筛选技巧。

一、使用 top 命令实时监控进程内存

1.1 top 命令简介

top 是 Linux 系统中最常用的性能监控工具之一,它能够 实时、动态地 展示当前系统中所有进程的资源占用情况,包括 CPU 使用率、内存占用、运行时间等。你可以把它理解为 Linux 版的"任务管理器"。

1.2 基本用法

直接在终端输入 top 即可启动:

top

启动后,你会看到一个不断刷新的列表界面,其中 %MEM 列就是每个进程占用物理内存的百分比。

1.3 按用户筛选进程

如果你只想查看某个特定用户的进程内存情况,可以使用 -u 参数。比如查看 www 用户下所有进程的资源占用:

top -u www

这样界面中就只会显示 www 用户所属的进程,方便你快速聚焦。

1.4 top 各字段含义详解

top 的进程列表中,每一列的含义如下:

字段 说明
PID 进程 ID,系统分配的唯一标识
USER 进程所有者的用户名
PR 进程优先级,数值越小优先级越高
NI Nice 值,影响进程的调度优先级
VIRT 进程占用的虚拟内存大小(包含 swap)
RES 进程实际使用的物理内存大小(常用来判断真实内存消耗)
SHR 进程使用的共享内存大小
S 进程状态:S 休眠、R 运行中、Z 僵死、N 低优先级
%CPU 进程占用的 CPU 使用率
%MEM 进程使用的物理内存占总内存的百分比
TIME+ 进程启动以来累计占用的 CPU 时间
COMMAND 启动该进程的命令名称

小贴士:重点关注 RES%MEM 这两列。RES 是进程实际驻留在物理内存中的大小,%MEM 则是占系统总内存的比例,两者结合能快速判断某个进程是否存在内存异常。

1.5 top 交互式快捷键

top 运行过程中,你可以按下以下快捷键来切换排序方式:

  • P:按 %CPU 使用率从高到低排序
  • M:按 %MEM 内存占用从高到低排序
  • T:按 TIME+ 累计 CPU 时间排序
  • q:退出 top

如果你想快速找到内存占用最高的进程,进入 top 后直接按 M 键就行。


二、使用 pmap 命令查看单个进程的内存映射

2.1 pmap 命令简介

top 适合做整体概览,而当你已经锁定了某个可疑进程,想要深入了解它的内存使用细节时,pmap 就派上用场了。

pmap 能够展示指定进程的 内存地址映射 信息,包括各段内存区域的大小、权限以及映射的文件等,非常适合排查内存泄漏等问题。

2.2 基本用法

首先你需要知道目标进程的 PID。可以通过 pstop 获取,然后执行:

pmap -d <PID>

例如,查看 PID 为 3721 的进程内存详情:

pmap -d 3721

输出示例(部分):

3721:   /usr/sbin/nginx -g daemon off;
Address           Kbytes Mode  Offset           Device    Mapping
0000000000400000    1084 r-x-- 0000000000000000 0fd:00001 nginx
0000000000700000       8 r---- 0000000000100000 0fd:00001 nginx
0000000000702000      28 rw--- 0000000000102000 0fd:00001 nginx
...
mapped: 45832K    writeable/private: 6248K    shared: 0K

最后一行的 writeable/private 就是该进程独占的可写内存量,是分析内存占用的关键指标。

2.3 查看更详细的扩展信息

如果需要更完整的内存映射信息,可以加上 -x 参数:

pmap -x 3721

这会额外显示 RSS(实际驻留内存)和 Dirty(脏页)等信息,有助于进一步分析。


三、使用 ps 命令按内存排序查看进程

3.1 ps 命令简介

ps 命令用于显示当前系统中的进程快照(不像 top 是实时刷新的)。它的优势在于可以灵活自定义输出格式,非常适合配合管道和排序命令做批量分析。

3.2 自定义输出列查看内存信息

使用 -e -o 参数可以指定需要展示的字段:

ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'

各字段说明:

字段 含义
pid 进程 ID
comm 命令名称(短格式)
args 完整的命令参数
pcpu CPU 使用率
rsz 实际物理内存占用(KB),最常用
vsz 虚拟内存占用(KB)
stime 进程启动时间
user 进程所属用户
uid 用户 ID

3.3 按内存占用排序并筛选特定用户

在实际运维中,我们通常需要找出某个用户下内存消耗最大的进程。可以结合 grepsort 实现:

ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | grep www | sort -nrk5

这条命令做了三件事:

  1. ps -e -o ...:列出所有进程并输出指定字段
  2. grep www:筛选出 www 用户的进程
  3. sort -nrk5:按第 5 列(即 rsz 实际内存)从大到小排序

这样你就能一眼看出哪个进程占内存最多。

3.4 只看内存占用前 10 的进程

如果不限定用户,想看全局内存 Top 10,可以这样写:

ps -e -o 'pid,user,rsz,comm' --sort=-rsz | head -11

第一行是表头,后面 10 行就是内存消耗最大的 10 个进程。


四、三种方法对比与选择建议

对比维度 top pmap ps
显示方式 实时刷新 一次性输出 一次性输出
适用场景 整体性能监控 单进程内存深度分析 批量进程查询与排序
交互性 支持快捷键交互 不支持 不支持
适合配合脚本 不太方便 一般 非常方便
内存信息粒度 中等 精细(地址级) 中等

选择建议

  • 日常巡检、快速定位异常 → 用 top,按 M 键排序即可
  • 确认某个进程的内存分布细节 → 用 pmap
  • 写脚本定时采集、批量对比 → 用 ps 配合排序

五、实用技巧补充

5.1 查看系统整体内存使用情况

在定位进程内存之前,建议先了解系统整体的内存状况:

free -h

输出中重点关注 available 字段,它表示系统当前还有多少可用内存。

5.2 使用 /proc 文件系统查看进程内存

Linux 的 /proc 虚拟文件系统提供了更底层的进程信息。查看某个进程的内存状态:

cat /proc/<PID>/status | grep -i mem

例如:

cat /proc/3721/status | grep -i mem

输出示例:

VmPeak:   456780 kB
VmSize:   423456 kB
VmRSS:     65432 kB
VmSwap:        0 kB

其中 VmRSS 就是该进程实际占用的物理内存。


常见问题

Q1:VIRT、RES、SHR 三者有什么区别?

  • VIRT(虚拟内存):进程申请的总内存空间,包含了实际使用的和尚未使用的部分,数值通常较大,不能直接反映真实内存消耗。
  • RES(常驻内存):进程当前实际驻留在物理内存中的大小,是判断内存占用最有参考价值的指标。
  • SHR(共享内存):与其他进程共享的内存部分(如动态链接库),多个进程可能共享同一块内存。

简单理解:看实际内存消耗主要看 RES

Q2:top 里 %MEM 显示很高,但 free 看内存还够,是怎么回事?

这通常是因为 Linux 内核会把空闲内存拿来做 缓存(cache)和缓冲(buffer),这部分内存在应用需要时可以被立即回收。所以即使 free 命令中 used 很高,只要 available 还有足够的量,系统就不会出现内存不足的问题。

Q3:如何找出内存泄漏的进程?

可以定期用 ps 命令采集各进程的 rsz 值并记录到日志文件中,然后通过对比前后的数值变化来判断。如果某个进程的 rsz 持续增长且不释放,那很可能存在内存泄漏。一种简单的做法:

## 每隔 60 秒记录一次所有进程的内存占用
while true; do
  echo "===== $(date) =====" >> /tmp/mem_monitor.log
  ps -e -o 'pid,user,rsz,comm' --sort=-rsz | head -20 >> /tmp/mem_monitor.log
  sleep 60
done

Q4:pmap 和 /proc/PID/maps 有什么关系?

pmap 本质上就是读取 /proc/<PID>/maps/proc/<PID>/smaps 文件并做格式化展示。如果你在某些精简系统中没有 pmap 命令,可以直接查看这些文件:

cat /proc/3721/maps
cat /proc/3721/smaps

总结

本文介绍了在 CentOS 7 环境下查看进程内存占用的 3 种核心方法:

  1. top 命令:适合实时监控,按 M 键即可按内存排序,快速发现内存占用异常的进程
  2. pmap 命令:适合深入分析单个进程的内存映射详情,排查内存泄漏时非常有用
  3. ps 命令:适合自定义输出格式,配合 sortgrep 做批量筛选和排序,也方便写入运维脚本

在实际工作中,这三个命令往往是配合使用的:先用 topps 发现异常进程,再用 pmap 深入分析。同时,别忘了用 free -h 查看系统整体内存状态,做到心中有数。

掌握这些命令,能帮助你在 Linux 运维中快速定位内存问题,保障服务器的稳定运行。


如果大家对 CentOS 7 进程内存监控还有哪些不清楚的地方,或者有更好用的内存排查技巧,欢迎在评论区交流分享~~~

版权声明

未经授权,禁止转载本文章。
如需转载请保留原文链接并注明出处。即视为默认获得授权。
未保留原文链接未注明出处或删除链接将视为侵权,必追究法律责任!

本文原文链接: https://fiveyoboy.com/articles/centos7-check-process-memory-usage/

备用原文链接: https://blog.fiveyoboy.com/articles/centos7-check-process-memory-usage/