top命令详解

228 阅读4分钟

top

top 命令是实时监控系统性能的核心工具,显示CPU、内存、进程等动态信息。

基本启动

top

image.png

界面分为三个主要区域:

  • 顶部汇总区
    • 系统整体状态
  • 任务信息区
    • 进程详细信息
  • 命令输入区
    • (底部)可交互操作

q 退出,按 h 查看帮助。

顶部汇总区详解

  1. 系统时间与运行时长
top - 14:30:25 up 45 days,  3:15,  1 user,  load average: 0.05, 0.10, 0.15
  • 14:30:25:当前时间
  • up 45 days:系统运行45天
  • 1 user:1个用户登录
  • load average:系统负载(1、5、15分钟平均值)
    • 单核CPU参考值:<1.0 正常,>1.0 有等待进程
    • 多核CPU:应除以核心数,如4核CPU负载4.0 = 100%使用率

关键点:负载高 ≠ CPU 高!可能是 I/O 阻塞(如磁盘慢、数据库锁)

  1. 任务统计
Tasks: 215 total,   1 running, 214 sleeping,   0 stopped,   0 zombie
  • total:总进程数
  • running:正在运行或可运行(就绪)的进程
  • sleeping:休眠(等待事件)的进程
  • zombie:僵尸进程(需警惕,可能程序未正确回收子进程)
  1. CPU使用率
%Cpu(s):  2.3 us,  1.2 sy,  0.0 ni, 96.3 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st
  • us (user):用户空间CPU占比 → 应用程序消耗
  • sy (system):内核空间CPU占比 → 系统调用消耗
  • ni (nice):优先级被 nice 调整过的用户进程 CPU 占比
  • id (idle):空闲CPU百分比 → 越低说明CPU越忙
  • wa (wait):I/O等待百分比 → 关键指标,过高说明磁盘瓶颈
  • hi (hardware interrupts):硬中断占用CPU
  • si (software interrupts):软中断占用CPU
  • st (steal):虚拟化环境中被偷走的CPU时间

🔥 重点关注

  • us 高 → 应用代码消耗 CPU(如死循环、复杂计算)
  • wa 高 → 磁盘或数据库 I/O 瓶颈(如大查询未索引)
  • sy 异常高 → 可能频繁系统调用或上下文切换
  1. 内存使用
MiB Mem :   7852.2 total,   1024.5 free,   4096.1 used,   2731.6 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   3500.0 avail Mem
  • Mem:物理内存
    • total:总内存
    • free:完全空闲内存(Linux 会尽量用内存做缓存,所以 free 小 ≠ 内存不足)
    • used:已使用内存(含缓存)
    • buff/cache:内核缓冲区(buffer)和页缓存(cache),可被回收
  • Swap:交换分区(虚拟内存)
    • used > 0 表示物理内存不足,开始使用磁盘交换(性能急剧下降!
    • 生产环境应尽量避免 Swap 被使用

💡真正可用内存 ≈ free + buff/cache

更准确看最后一行的avail Mem(可用内存,考虑了可回收缓存)

进程信息区详解

默认按CPU使用率排序:

PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
1234 mysql    20   0   12.3g   5.2g   1.3g S  45.2  68.1   100:15.67 mysqld
5678 nginx    20   0  123456  45678  23456 S   2.3   0.6     5:23.45 nginx
  • PID:进程ID
  • USER:进程所有者
  • PR/NI:优先级/谦让值(-20到19,越小优先级越高)
  • VIRT:虚拟内存用量(包含共享库、映射文件等)
  • RES:实际物理内存用量 → 关键指标
  • SHR:共享内存大小
  • S:进程状态(R=运行,S=睡眠,D=不可中断睡眠,Z=僵尸等)
  • %CPU:CPU使用百分比
  • %MEM:内存使用百分比
  • TIME+:累计CPU时间
  • COMMAND:进程名/命令

交互模式使用操作

在top运行时按以下键:

  • q:退出
  • h:帮助
  • M:按内存使用排序
  • P:按CPU使用排序(默认)
  • T:按运行时间排序
  • N:按PID排序
  • k:杀死进程(会提示输入PID)
  • r:修改进程优先级(renice)
  • 1:显示每个CPU核心的详细使用率
  • z:彩色/黑白显示切换
  • c:显示完整命令路径
  • Shift + >:向右滚动查看完整命令
  • u:然后输入用户名,只显示该用户进程
  • d:修改刷新间隔(秒),如 d 1 表示每秒刷新
  • W:保存当前配置到~/.toprc

实用场景技巧

  1. 只监控某个进程
top -p 12345          # 监控 PID=12345 的进程
top -p $(pgrep java)  # 监控所有 Java 进程(若多个会失败,建议单个)
  1. 批量监控多个进程(需脚本)
# 示例:监控所有 Java 进程
top -p $(jps | awk '{print $1}' | paste -s -d ',' -)
  1. 非交互式输出(用于日志或脚本)
top -bn1              # 批量模式,输出一次后退出
top -bn1 -o %MEM      # 按内存排序,输出一次
  1. 保存快照用于分析
top -bn3 -d 2 > /tmp/top.log   # 每 2 秒采样一次,共 3 次,存入日志

常见误区

误区正确理解
free 内存少 = 内存不足”Linux 会用空闲内存做缓存,看 avail Mem 或 free + buff/cache
VIRT 大 = 内存泄漏”VIRT 包含映射文件和 swap,看 RES 和 %MEM 才真实
%CPU 超过 100% 是 bug”多核 CPU 下,100% × 核数。4 核机器最高 400%
wa 高是 CPU 问题”wa 高是 I/O 瓶颈,应查磁盘、数据库、网络

总结:top 在生产排查中的定位

  • 第一步:用 top 看全局资源瓶颈(CPU?内存?I/O?)
  • 第二步:按 M 找内存大户,按 P 找 CPU 大户
  • 第三步:结合 jstatjmapiotopvmstat 等深入分析

💡 记住口诀:

OOM 看 M,高 CPU 看 P,卡顿查 wa,僵尸盯 Z