top 批处理模式是什么
top 加 -b 进入批处理模式:不占用终端、不做交互刷新,把每次采样的完整快照按顺序打印到标准输出。这一下就把 top 从「盯着看的工具」变成「能进脚本和日志的采样器」——定时采一份系统快照留档、从输出里抓负载与热点进程、观察某个进程十分钟内的资源变化,都靠这个模式实现。与之配套的是采样次数与间隔两个参数。
基本信息
| 适用平台 | GNU/Linux 的 procps-ng 版 top(macOS 的 top 参数不同) |
|---|---|
| 语法 | top -b -n 采样次数 -d 间隔秒数 |
| 常用选项 | -b 批处理 -n 次数 -d 间隔 -o 排序字段 -p 指定进程 -u 指定用户 |
| 默认排序 | 按 CPU 占用降序 |
| 输出结构 | 开头若干行系统概况,之后是进程表 |
| 权限 | 普通用户可看全局概况,进程详情受权限限制 |
典型使用场景
- 定时采集系统快照落盘,事后分析故障时段的资源使用。
- 在报警脚本里取负载与热点进程,替代解析交互式界面的输出。
- 长时间观察某个进程的内存或 CPU 变化趋势。
- 对比调优前后同一时段的采样结果。
- 记录故障现场,作为工单附件或复盘材料。
常用写法
常用写法
top -b -n1 | head -20 # 单次快照,取头部系统概况
top -b -d 1 -n 5 > /tmp/top.log # 每秒一次共 5 次,落盘留档
top -b -n1 -o %MEM | head -15 # 按内存排序看排行
top -b -n1 -p 1234 # 只盯指定进程
top -b -n1 -u deploy | head -20 # 只看某个用户的进程
top -b -n1 -o %CPU | awk 'NR<=7 || $9>50' # 筛出 CPU 占用高的行
top -b -n 3 -d 2 -p 1234 | grep 1234 # 观察目标进程多次采样变化
top -b -n1 -o %MEM | awk 'NR<=7 || $10>20' # 筛出内存占用高的行参数与输出读法
| 参数或字段 | 作用 | 使用要点 |
|---|---|---|
| -b | 批处理模式 | 无交互键,输出适合管道与重定向 |
| -n 次数 | 采样次数 | 次数太少只有单点数据,看趋势至少 3 次 |
| -d 间隔 | 采样间隔秒数 | 批处理下常用 1 到 5 秒 |
| -o 字段 | 排序字段 | 如 CPU 与内存占用,字段名含百分号 |
| -p PID | 只看指定进程 | 排查单进程问题最常用 |
| -u 用户 | 只看指定用户 | 多用户机器上区分业务归属 |
单次快照里进程的 CPU 百分比是自进程启动以来的平均值口径,不是瞬时值。要看瞬时趋势就用 -d 1 -n 3 并重点观察后两次采样,单点数据容易漏掉尖峰。
字段名含百分号,在 awk 里直接匹配字符容易踩转义问题,用位置列(CPU 通常是第 9 列、内存第 10 列)更稳;不同版本的列顺序可能微调,解析前先看一遍本机输出。
批处理模式下系统概况的行数与字段随版本变化,脚本硬编码截取行号前应先打印一份完整输出核对,避免升级后被静默改动的格式带偏。