在此简单列举一些常见的监控工具,以及配置方式等。
SAR
sar (select activity information) 用于采集系统的信息,默认会保存一个月的信息,在 CentOS 中包含在 sysstat软件包中。与此相关的还有:
- sac, system ativity data collector。也就是 sar 的后端,用于收集信息;
- sa1,用于将信息保存为二进制信息,默认位置为
/var/log/sa/saXX
(其中XX表示当月的日期); - sar2,显示每天的统计信息,是 一个 shell 脚本;
- sadf,用于转换为其它的格式 (如csv,xml) 的程序。
sar1 和 sar2 会在 cron 任务中调用,配置在 /etc/cron.d/sysstat
文件中,默认每 10 分钟调用 sa1
采集一次数据;在 23:53 时通过 sa2 转换一次数据,默认保存 28 天,可以在 /usr/lib64/sa/sa2
中设置。
其中 /etc/cron.d/sysstat
文件内容如下。
# Run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1
# Generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A
因为使用的是 crontab ,所以最小的粒度是 1min;当然,也可以使用 sa1 1 60
每秒执行依次,并执行 60 次,进一步减小监控的粒度。
保存数据
默认会将监控数据保存在 /var/log/sa/
目录下,其中保存的数据,例如有一个 sa01 文件,可以直接通过 sar -f /var/log/sa/sa01
命令查看。
简单列举常用的参数:
sar [interval [count]]
如果不使用时间参数则会显示到现在为止,所搜集的统计数据;
-A
保存所有,等加于-bBdHqrRSuvwWy -I SUM -I XALL -m ALL -n ALL -u ALL -P ALL;
-f file
从指定文件读取显示;
CPU
-u 统计平均值;-P ALL可以指定cpu号或者显示所有;
磁盘建议采用 iostat ,sar -d
采用的设备名称不太好识别,采用的是从设备号。
关于一些常见的监控项,可以参考如下图片:
TOP
top 是查看资源最常用的方式。
常用场景
简单列举下经常使用的场景。
Batch Mode
默认是交互模式,也就是循环执行,并接收用户的按键,这样对于一些采集的程序就不方便使用,这里可以使用 Batch Mode 。
----- 使用Batch Mode打印指标,此时仍是无限循环
$ top -b
----- 通过-n参数指定只打印一次
$ top -b -n 1
----- 指定时间点运行,需要注意TERM环境变量,top命令需要但是at并没有获取该参数
$ cat ./test.at
TERM=linux top -b -n 1 >/tmp/top-report.txt
$ at -f ./test.at now+1minutes
监听特定进程
可以通过如下方式指定只监控特定进程或者用户。
----- 指定多个进程
$ top -p 4360,4358
$ top -p 4360 -p 4358
----- 指定用户
$ top -u johndoe
$ top -u 500
$ top -U johndoe
多线程
可以通过 ps -eLf
命令查看,也即通过 -L
参数显示其 LWP(线程ID) 和 NLWP(线程的个数),而且,还可以查看线程在哪个 CPU 上运行。
$ ps -eo ruser,pid,ppid,lwp,psr,args -L
其中,每一列依次为:用户ID,进程ID,父进程ID,线程ID,运行该线程的CPU的序号,命令行参数(包括命令本身)。
对于 top 命令,可以通过 top -p LWP
、top -H
或者 top + H
,也即通过 H 命令打开线程。
一些其它的常用命令如下。
----- 通过-H(Threads toggle)参数,一行显示一个线程
$ top -H -p `pidof mysqld`
----- 查看所有存在的线程,H(Show threads as if they were processes)
$ ps Hp `pidof mysqld`
----- 命令行列默认显示的是cmdline信息,可以通过c参数限制comm的信息
$ ps cuHp `pidof mysqld`
----- 也可以通过如下方式指定显示的列,详细参数可以将comm替换为args或者cmd
$ ps -o ruser,pid,ppid,lwp,psr,%cpu,%mem,vsz,rss,lstart,etime,comm Hp `pidof mysqld`
----- 如果不需要Header可以添加h选项
$ ps h -o ruser,pid,ppid,lwp,psr,%cpu,%mem,vsz,rss,lstart,etime,comm Hp `pidof mysqld`
----- 查看线程调用堆栈
$ pstack `pidof mysqld`
----- 查看线程数
$ pstree -p `pidof mysqld`