top -b -n1 是 linux 非交互式获取系统资源快照的标准命令,适用于脚本定时监控或故障记录;-b 启用批处理模式输出纯文本,-n1 限定仅采集一次数据,输出含系统概览与按 cpu 排序的进程列表。

Top -b -n1 是 Linux 下非交互式抓取系统资源快照的标准方式,适合写入脚本做定时监控或故障现场记录。
基础命令结构与输出说明
执行以下命令即可一次性获取完整快照:
- top -b -n1 > /tmp/top_snapshot_$(date +%s).log —— 生成带时间戳的纯文本快照文件
- -b 表示批处理模式(Batch mode),禁用交互功能,输出为纯文本
- -n1 表示只采集 1 次迭代数据(默认 top 每 3 秒刷新,-n 后接数字控制总次数)
- 输出包含系统概览(uptime、load avg、tasks、CPU/mem 使用率)和进程列表(按 CPU 占用排序)
增强实用性:添加时间头与关键字段过滤
原始 top 输出较冗长,可结合 head 和 grep 提取核心信息:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- echo "== $(date) =="; top -b -n1 | head -20 | grep -E "^(top|Tasks|Cpu|Mem|PID|COMMAND)" > /var/log/top-summary.log
- 这样每条记录开头带时间标记,且只保留顶部统计行 + 进程表头 + 前几行高负载进程
- 如需固定列宽便于后续解析,可用 top -b -n1 -w512 防止换行截断
集成到定时监控:配合 cron 自动保存
将快照任务加入系统定时任务,例如每 5 分钟记录一次:
- 运行 crontab -e,添加一行:
- */5 * * * * top -b -n1 > /var/log/top/$(date +\%Y\%m\%d_\%H\%M).log 2>/dev/null
- 注意:\% 需转义,否则 cron 会将其解释为换行;建议提前创建目录 mkdir -p /var/log/top
- 搭配 logrotate 或简单 shell 脚本定期清理旧文件(如保留最近 7 天)
替代方案:更轻量、更可控的 proc 直读(进阶推荐)
若仅需 CPU、内存、负载等关键指标,/proc 文件系统比 top 更稳定、开销更低:
- printf "%s %s %s\n" "$(date)" "$(cat /proc/loadavg | awk '{print $1,$2,$3}')" "$(free -m | awk '/Mem:/ {print $3/$2*100}')" >> /var/log/sysstat.log
- 这种方式无外部依赖、不触发 top 的调度开销,适合高频采样(如每秒级)或嵌入式环境
- top 快照仍不可替代——当需要排查具体哪个进程异常时,完整 top -b -n1 输出仍是首选证据










