每天深入一个Linux命令系列 - top命令深度解析
功能分类
实时系统性能监控旗舰工具
命令定位:提供动态更新的资源全景视图(CPU/内存/任务/负载),是服务器性能调优与故障排查的"控制面板"。
核心语法
top [选项组]
常用选项详解
选项 | 功能描述 | 场景示例 |
---|---|---|
-d <秒> | 刷新间隔控制 | top -d 3(3秒/次刷新) |
-p <PID1,PID2> | 监控特定进程 | top -p 11321,14567 |
-n <次数> | 限定刷新次数后退出 | top -n 5 > log.txt(记录5次快照) |
-b | 批处理模式(可重定向输出) | top -b -n 1 > stats.log |
-H | 显示线程粒度(需在交互模式按H切换) | top -H -p 888 |
-o <%MEM> | 启动时按指定字段排序 | top -o %CPU(按CPU占用排序) |
交互模式热键秘籍
快捷键 | 功能说明 | 高级用法 |
---|---|---|
P | 按CPU使用排序(大写) | 快速定位CPU高占用进程 |
M | 按内存占用排序(大写) | 发现内存泄漏嫌疑对象 |
T | 按运行时间排序 | 识别长时间运行进程 |
z | 配色模式切换 | 重点数据高亮显示 |
c | 显示完整命令行 | 查看Java/Python进程的启动参数 |
k → 输入PID杀死进程 | 终止指定PID进程 | 强制结束异常进程(需输入PID) |
W | 保存当前配置 | 定制化视图持久化 |
Shift + F | 启用列过滤器 | (增减显示字段) |
u → 输入用户名 | 过滤某用户进程 | |
s -> 5 | 改为5秒刷新间 | |
z | 切换颜色高亮 | |
c | 显示完整命令路径 | |
1 | 展开多核CPU详情 |
界面结构
系统概览:
top - 17:42:07 up 127 days, 20:08, 0 users, load average: 0.35, 0.36, 0.40
Tasks: 300 total, 1 running, 299 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.9 us, 1.8 sy, 0.3 ni, 96.8 id, 0.1 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 16430808 total, 662492 free, 7839316 used, 7929000 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 7598080 avail Mem
------------------------------------------------------------------------------------
进程列表:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6270 lt 20 0 5437568 4.4g 22944 S 2.3 28.0 151:23.06 node
24482 lt 20 0 184724 19380 1048 S 1.7 0.1 281:29.31 skynet
7506 lt 20 0 2011860 83944 19216 S 0.7 0.5 200:24.87 node
17171 lt 20 0 893428 37512 11328 S 0.3 0.2 70:47.59 PM2 v5.4.2: God
22971 lt 20 0 1034632 43304 19708 S 0.3 0.3 0:57.12 node /home/lt/c
进程指标
字段 | 说明 | 示例场景 |
---|---|---|
PID | 进程ID | kill -9 PID 终止进程 |
USER | 所有者 | 排查非常规用户进程 |
%CPU | CPU占用率 | 长期100%可能代码死循环 |
%MEM | 物理内存占比 | 比VIRT更反映实际消耗 |
VIRT | 虚拟内存总量 | 含未使用的库/共享内存 |
RES | 物理内存使用 | 真实占用量(同任务管理器) |
S | 进程状态 | S=睡眠, R=运行, Z=僵尸 |
核心指标解析
系统性能
Load Average (负载平均值)
- 示例:0.75 0.58 0.49
- 单核CPU的理想值 < 1.0,若持续高于核数需警惕。
CPU使用率:
- us : 用户态占用 → 应用消耗
- sy : 内核态占用 → 系统调用
- ni : 调整过优先级的进程占用
- wa : IO等待 → 高则IO瓶颈
内存:
- total / free / used : 物理内存
- buff/cache : 缓存占用(可快速释放)
- avail Mem : 真正可用内存(含缓存可回收)
经典实战场景
定位CPU瓶颈
1、运行 top -d 2 提高刷新频率
2、按P → 观察持续高占用的进程
3、记录PID → 使用 strace -p PID 或 perf 分析调用栈
内存泄漏监控
1、按M → 按内存排序
2、持续观察RES是否持续增长(无视VIRT)
3、pmap -x PID 检查具体内存分配情况
容器监控穿透
# 追踪容器内进程资源消耗(需先获取容器PID)
docker inspect --format '{{.State.Pid}}' my-container | xargs top -p
资源趋势快照
# 生成3次监控报告(间隔2秒)
top -b -n 3 -d 2.0 > /var/tmp/top_snapshot_$(date +%F).log
微秒级进程追踪
# CPU使用率突破阈值告警(配合watch命令)
watch -n 0.1 "top -b -n1 | grep 'ThresholdProcess'"
高级技巧
持久化显示设置
1、在 top 中按 W 保存当前配置(文件存于~/.toprc)
2、重启 top 后自动应用高亮/排序/列字段等设置
# ~/.toprc 示例(高亮超过80% CPU的进程)
id:altscr=0, sortindx=15, ...
fieldscur=AEHIOQTWKNMbcdfgjplrsuvyzX
summary_hl=1, usrHL=80:green,80:red
动态字段管理:
通过 f 键交互界面自由配置显示列(如添加IO等待/虚拟内存等指标)
脚本化监控:
# 持续输出前5高CPU进程(每秒刷新)
top -b -d 1 | awk '/^top -/ {time=$3} $1~/^[0-9]/ && $9>50 {print time,$1,$NF,$9"%"}'
附:替代工具推荐
-
htop → 交互更友好(支持鼠标、树状图)
-
atop → 历史性能数据分析
-
glances → 聚合式监控(网络/磁盘等)
-
nmon → 企业级性能快照
掌握 top 可为服务器诊断打下核心基础,建议结合 vmstat/iostat 多维度定位瓶颈。