脚本中Top性能查看如何批处理

wen 实用脚本 13

本文目录导读:

脚本中Top性能查看如何批处理

  1. 核心思路:使用 top-b(批处理)和 -n(次数)参数
  2. 场景1:一次性抓取当前系统资源消耗 Top 10
  3. 场景2:定时持续采集(如每5秒采集一次,共10次)
  4. 场景3:结合 Shell 脚本循环采集(更灵活)
  5. 场景4:抓取特定资源占用(如 CPU、内存)
  6. 场景5:如果 top 输出太长,可转换为 CSV 格式(便于导入 Excel)
  7. 常见问题与注意事项
  8. 实操示例:脚本中快速获取 CPU Top5

在脚本中进行“Top性能查看”的批处理,通常指以非交互方式运行 top 命令,将结果输出到文件或传递给其他命令,这避免了 top 全屏刷新的交互模式。

以下是几种常用的批处理方法,适用于 Linux/Unix 环境:

核心思路:使用 top-b(批处理)和 -n(次数)参数

top -b -n 1

参数说明:

  • -b:批处理模式,输出纯文本,不会清屏。
  • -n N:运行 N 次后自动退出(-n 1 只抓取一次快照)。

场景1:一次性抓取当前系统资源消耗 Top 10

输出到终端:

top -b -n 1 | head -20

这会显示:系统概况(前5行) + 进程列表的前15行。

输出到文件(用于定时记录):

top -b -n 1 > /tmp/top_snapshot_$(date +%Y%m%d_%H%M%S).log

场景2:定时持续采集(如每5秒采集一次,共10次)

基础用法:

top -b -n 10 -d 5 > /var/log/top_performance.log
  • -d 5:采集间隔5秒(默认3秒)。
  • -n 10:共采集10次。

进阶:只保留进程列表(去掉系统汇总信息):

top -b -n 1 -o %CPU | tail -n +8 > only_processes.log
  • -o %CPU:按 CPU 使用率排序(也可用 %MEM)。
  • tail -n +8 跳过前7行(系统负载、CPU、内存、Swap、进程统计等汇总信息)。

场景3:结合 Shell 脚本循环采集(更灵活)

#!/bin/bash
# 文件名: monitor_top.sh
while true
do
    echo "===== Top Snapshot at $(date) =====" >> /var/log/top_continuous.log
    top -b -n 1 -o %CPU | head -15 >> /var/log/top_continuous.log
    echo "" >> /var/log/top_continuous.log
    sleep 10
done

启动脚本:nohup bash monitor_top.sh &


场景4:抓取特定资源占用(如 CPU、内存)

按内存排序,只显示进程 Top 10:

# 方法1:直接使用 top
top -b -n 1 -o %MEM | head -20
# 方法2:结合 awk(更易解析,但会丢失进程状态等列)
top -b -n 1 | awk 'NR>7 && NR<18 {print $1, $9, $10, $12}' 
# 说明:NR>7 跳过汇总,NR<18 取前10个进程(第8-17行)

场景5:top 输出太长,可转换为 CSV 格式(便于导入 Excel)

# 定义函数:将 top 输出转为 CSV
top_to_csv() {
    top -b -n 1 | awk 'NR>7 {print $1","$2","$9","$10","$12","$13}'
}
top_to_csv > process_snapshot.csv

注意:top 输出的列数可能因版本而异,建议先运行一次查看列号。


常见问题与注意事项

  1. head -20 的结果top -b -n 1 默认按 CPU 排序,但 head 只截取前几行,未显示完整列表,如果只想看某一资源占用 Top N,需用 -o 排序。
  2. -o 选项:并非所有版本的 top 都支持 -o,如果系统不支持,可用 top -b -n 1 | sort -k9 -rn 代替(但会丢失 top 的列对齐和标题行)。
  3. 系统负载信息不完整head -20 只显示前20行,若需完整进程列表,去掉 head
  4. 如果使用 htophtop 的批处理模式是 --batch,用法类似:
    htop -C --batch --delay=5

实操示例:脚本中快速获取 CPU Top5

#!/bin/bash
# 获取 CPU占用最高的前5个进程
echo "Top 5 CPU users:"
top -b -n 1 -o '%CPU' | awk 'NR>7 && NR<13 {printf "%-20s CPU:%-5s MEM:%-5s CMD:%-30s\n", $1, $9, $10, $12}'
# 获取内存占用最高的前5个进程
echo "Top 5 Memory users:"
top -b -n 1 -o '%MEM' | awk 'NR>7 && NR<13 {printf "%-20s CPU:%-5s MEM:%-5s CMD:%-30s\n", $1, $9, $10, $12}'
  • 抓取一次快照:top -b -n 1
  • 持续采集:top -b -n N -d S
  • 按资源排序:-o %CPU-o %MEM
  • 输出到文件:使用 > 重定向

根据你的具体需求(是一次性查看、后台监测还是日志记录),选择合适的参数组合即可。

抱歉,评论功能暂时关闭!