top默认按%cpu降序排序,首进程即当前cpu占用最高者;但“最大”需明确定义——查内存需按m键切至%mem排序,查rss则用ps -eo pid,rss,comm --sort=-rss。

top 默认就是按 CPU 占用排序,但“最大”得先定义清楚
很多人一说“最大的进程”,默认以为是内存最多或 CPU 最高,其实 top 本身不定义“最大”,它只按你指定的字段排序。默认行为是按 %CPU 降序,所以刚运行 top 时顶部第一个进程,就是当前 CPU 占用最高的——但这未必是你真正想找的“最大”。
常见误解是认为“最大 = 内存最多”,结果按默认视图看半天没找到内存大户。记住:top 启动后默认只管 CPU,不看内存、不看虚拟内存、不看运行时间。
- 想看内存占用最高?必须手动按
M(大写)切换到%MEM排序 - 想看实际物理内存(RSS)最多?
top界面里没有直接 RSS 排序键,得切到字段选择模式(按f),启用RSS列再肉眼扫,或换ps - 想看虚拟内存(
VIRT)最大?同样需按f启用该列,top不支持按VIRT直接排序
按内存排序:按 M 键不是万能的,注意大小写和状态切换
top 里按 M(Shift+M)是切换按 %MEM 排序,但它不是“一键锁定”,而是循环切换:%MEM 降序 → %MEM 升序 → 回到上一个排序字段(比如之前是 CPU,就切回 %CPU)。
容易踩的坑:
- 误按小写
m:在某些终端或旧版top中,小写m是关闭内存显示(MEM row),不是排序 - 没注意到顶部提示行:排序生效后,
top会在右上角显示类似Sort field: %MEM的提示,没看到说明没切成功 - 排序后仍看到僵尸进程(
Z状态)排前面:它们%MEM可能非零但已不活动,需结合STAT列人工过滤
ps aux --sort=-%mem 比 top 更稳,尤其脚本中别依赖交互式操作
自动化场景或写监控脚本时,硬敲 M 键不现实。ps 命令一次性输出 + 显式排序更可靠:
ps aux --sort=-%mem | head -n 11
说明:
-
--sort=-%mem:明确按物理内存百分比降序,-表示降序,+%mem才是升序 -
head -n 11:因为第一行是表头(USER、PID、%MEM…),要取前 10 个进程就得head -n 11 - 兼容性注意:CentOS 6 / RHEL 6 自带的 procps 版本太老,不支持
--sort;得退化为ps aux | sort -k10nr | head -n 11(第 10 列是%MEM,不同系统列数可能微调,先ps aux | head -1确认)
别只盯着 %MEM,RSS 和 VIRT 的差异常被忽略
%MEM 是“占总物理内存的百分比”,看着直观,但掩盖了两个关键事实:
-
RSS(Resident Set Size):进程当前真实占用的物理内存 KB 数。一个%MEM低但RSS高的进程(比如总内存很大但只用了其中一部分),可能才是真正的内存大户 -
VIRT(Virtual Memory Size):进程申请的全部虚拟地址空间,含已 swap 出去的部分、mmap 映射的文件等。值极大不等于真占内存,但持续飙高可能预示内存泄漏 - 例如:Java 进程常
VIRT几十 GB,%MEM却只有 15%,此时看RSS(即ps输出的rss列)才反映真实压力
查 RSS 最大的前 5 个进程,用这个更准:
ps -eo pid,rss,comm --sort=-rss | head -n 6











