ltts blog

每天深入一个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进程IDkill -9 PID 终止进程
USER所有者排查非常规用户进程
%CPUCPU占用率长期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 多维度定位瓶颈。

目录