Linux top 持续监控脚本

在定位 Linux 性能问题时,经常需要排查是哪个进程造成的系统资源(CPU、内存)过高。

这里提供一个脚本,可方便的进行持续的 top 监控,将监控结果按时间戳命名,保存到文件。

后续,可通过 grep 命令或脚本解析进行问题定位。

主要功能

  • 输出完整 top 进程列表
  • 支持自定义采集间隔
  • 支持删除过期日志

脚本

top_monitor.sh 脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#! /bin/bash

#############################################################
#
# Monitor top to file, YYYYmmdd_HHMMSS.txt
#
#
# usage:
# nohup ./top_monitor.sh [outputdir] &
# params:
# outputdir: optional, default: /var/log/top_monitor/
#
#
# author: liangxinhui@qq.com
#
# version: 0.1 2020-04-11
#
#############################################################

# use first argument as output dir,
# if not set, use a default path
OUTPUTDIR=$1
if [ ! $OUTPUTDIR ]; then
OUTPUTDIR=/var/log/top_monitor/
fi

# monitor interval
SLEEP_SECONDS=30
# max keep file time, set to 0 for all
# check interval = 100 * SLEEP_SECONDS
KEEP_FILE_MINUTES=0

mkdir -p $OUTPUTDIR

export COLUMNS=1024

for ((i=0;;i++ ));
do

DATETIME=$(date +%Y%m%d_%H%M%S)
top -b -c -n 1 > $OUTPUTDIR/top_${DATETIME}.txt

# remove old log files
if [ $KEEP_FILE_MINUTES -gt 0 -a `expr $i % 100` == 0 ]; then
find $OUTPUTDIR -type f -mmin +$KEEP_FILE_MINUTES -delete
fi

sleep $SLEEP_SECONDS
done