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 环境下,快速准确地定位哪个进程吃掉了大量内存,对于保障服务稳定运行至关重要。
本文将围绕 top、pmap、ps 这三个核心命令,手把手教你如何在 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。可以通过 ps 或 top 获取,然后执行:
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 按内存占用排序并筛选特定用户
在实际运维中,我们通常需要找出某个用户下内存消耗最大的进程。可以结合 grep 和 sort 实现:
ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | grep www | sort -nrk5这条命令做了三件事:
ps -e -o ...:列出所有进程并输出指定字段grep www:筛选出www用户的进程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
doneQ4:pmap 和 /proc/PID/maps 有什么关系?
pmap 本质上就是读取 /proc/<PID>/maps 和 /proc/<PID>/smaps 文件并做格式化展示。如果你在某些精简系统中没有 pmap 命令,可以直接查看这些文件:
cat /proc/3721/maps
cat /proc/3721/smaps总结
本文介绍了在 CentOS 7 环境下查看进程内存占用的 3 种核心方法:
- top 命令:适合实时监控,按 M 键即可按内存排序,快速发现内存占用异常的进程
- pmap 命令:适合深入分析单个进程的内存映射详情,排查内存泄漏时非常有用
- ps 命令:适合自定义输出格式,配合
sort和grep做批量筛选和排序,也方便写入运维脚本
在实际工作中,这三个命令往往是配合使用的:先用 top 或 ps 发现异常进程,再用 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/