在呼叫中心系统中, 如何进行 呼叫中心服务器性能监控 是管理员经常遇到的一个问题. 使用sar,你可以即时地监视各种Linux子系统(如:CPU, Memory, I/O…),还可以收集并存储一个正在运行的基础性能数据,做一个历史性的分析来识别瓶颈。
Sar是sysstat包的一部分。本文解释如何安装和配置sysstat包(包含sar工具),并解释如何使用sar监控以下Linux性能统计数据。
- Collective CPU usage
- Individual CPU statistics
- Memory used and available
- Swap space used and available
- Overall I/O activities of the system
- Individual device I/O activities
- Context switch statistics
- Run queue and load average data
- Network statistics
- Report sar data from a specific time
一. 安装和配置sysstat
安装sysstat包
首先,确保最新版本的sar系统在你的机器上可以运行。根据您的系统版本,使用下列适合的方法进行安装。
sudo apt-get install sysstat (or) yum install sysstat (or) rpm -ivh sysstat-10.0.0-1.i586.rpm
从源代码安装Sysstat
从sysstat下载页面下载最新版本:http://sebastien.godard.pagesperso-orange.fr/download.html
当然,你也可以使用wget下载:
wget http://pagesperso-orange.fr/sebastien.godard/sysstat-10.0.0.tar.bz2 tar xvfj sysstat-10.0.0.tar.bz2 cd sysstat-10.0.0 ./configure --enable-install-cron
注意:确保 – -enable-install-cron 配置选项。这确保接下来是自动安装。如果你不配置sysstat的这个选项,你必须自己手动创建了。
- 创建/etc/rc.d/init.d/sysstat
- 从/etc/rc.d/rc*.d/directories 到 /etc/rc.d/init.d/sysstat创建适当的链接,Linux引导过程会自动启动sysstat。
- 例如,/etc/rc.d/rc3.d/S01sysstat会自动链接到/etc/rc.d/init.d/sysstat
执行./configure命令后,再执行以下命令,继续安装:
make make install
注意:这将安装sar和其他systat实用程序 到/usr/local/bin下面。
一旦安装完毕,可使用“sar -V”命令来验证sar的版本,sysstat 10是当前的稳定版本。
$ sar -V 显示结果: sysstat version 10.2.0 (C) Sebastien Godard (sysstat orange.fr)
最后,确保sar可以运行。例如,下面给出了系统CPU统计3次(1秒间隔) 的数据。
$ sar 1 3 显示结果: Linux 2.6.18-194.el5PAE (dev-db) 03/26/2011 _i686_ (8 CPU) 01:27:32 PM CPU %user %nice %system %iowait %steal %idle 01:27:33 PM all 0.00 0.00 0.00 0.00 0.00 100.00 01:27:34 PM all 0.25 0.00 0.25 0.00 0.00 99.50 01:27:35 PM all 0.75 0.00 0.25 0.00 0.00 99.00 Average: all 0.33 0.00 0.17 0.00 0.00 99.50
Sysstat的实用程序部分
以下是其他sysstat实用工具:
- sar 收集和显示所有系统活动的统计数据。
- sadc 代表“系统活动数据收集器”,这是sar进行数据收集的后端数据。
- sa1 在二进制数据文件存储系统活动。 sa1要基于sadc完成存储。sa1从cron开始运行。
- sa2 创建日常收集到的统计数据摘要。sa2从cron开始运行。
- sadf 可以生成CSV,XML和其他多种格式的sar报告。用它可以和其他工具来集成sar数据。
- iostat 生成 CPU, I/O 统计数据。
- mpstat 显示 CPU 的统计结果。
- pidstat 报告基于进程号 (PID)的统计数据。
- nfsiostat 显示 NFS I/O (网络文件系统)统计数据。
- cifsiostat 生成 CIFS (通用Internet文件系统)统计数据。
本文主要关注sysstat基本面和sar工具。
使用cron收集sar统计数据–sa1和sa2的统计数据
在/etc/cron.d目录下创建sysstat文件,可用来收集sar的历史数据。
# vi /etc/cron.d/sysstat 显示结果: */10 * * * * root /usr/local/lib/sa/sa1 1 1 #表示每10分钟 53 23 * * * root /usr/local/lib/sa/sa2 -A #表示 23:53
如果已经用源码安装了sysstat,那么sa1和sa2的默认位置是 /usr/local/lib/sa。如果你使用发行版安装更新方法(例如:yum, up2date, 或 apt-get),默认位置一般为:/usr/lib/sa/sa1 和 /usr/lib/sa/sa2。
注意: 想全面了解 cron , 阅读 Linux Crontab: 15 Awesome Cron Job Examples.
/usr/local/lib/sa/sa1
- 这个是每10分钟收集一次sar数据作为历史参考。
- 如果你想每5分钟收集一次sar的统计数据,将/etc/cron.d/sysstat文件里的 */10 改成 */5 即可。
- 这样一来,数据将被写到/var/log/sa/saXX 文件中。XX代表一个月中的几日。saXX文件是一个二进制文件,不能使用文本编辑器打开它而进行预览。
- 例如:如果今天是某月的26号,那么sa1将会把sar数据写到/var/log/sa/sa26文件里。
- 您可以传递两个参数给sa1:时间间隔(以秒为单位)和计数。
- 在上面的crontab的例子:sa1 1 1意味着sa1每1秒收集1次sar数据(每隔10分钟)。
/usr/local/lib/sa/sa2
- 这个是在接近午夜(在23:53)的时候创建sar数据日常的数据报告。
- sa2创建 /var/log/sa/sarXX 文件 (注意,这个是不同于sa1中saXX 文件的). 这个 sarXX 文件是由sa2创建的一个可通过文本编辑器查看的ascii文件。
- 这将删除超过一个星期的saXX文件。因此,需要写一个每周都会运行的快捷shell脚本,将/var/log/sa/*文件复制到其他目录中,以便进行历史的 sar数据分析。
二. 10个 Sar 用法的实际案例
有以下两种方法可以调用sar:
- sar 后面跟着一个选项 (不指定 saXX 数据文件)。这将寻找 当天的saXX数据文件和 截至到当前天之前的报告性能数据记录。
- sar后面跟着一个 -f 选项,指定一个 saXX 数据文件。这将报告特定某天的性能数据,即 XX是某月里XX号。
下面的例子中,我们将解释如何查看某些特定某日的性能数据。为了找到特定某日的,在sar命令后面加“-f /var/log/sa/saXX”语句。
所有的sar命令将有以下输出的第一行:
$ sar -u 显示结果: Linux 2.6.18-194.el5PAE (dev-db) 03/26/2011 _i686_ (8 CPU)
- Linux 2.6.18-194.el5PAE – Linux系统的内核的版本。
- (dev-db) – 收集sar数据的主机名。
- 03/26/2011 – 收集sar数据的日期。
- _i686_ – 系统构架。
- (8 CPU) – 系统上可用的cpu数量。在多核心系统中, 用来表明cpu核心的总数。
1. CPU Usage of ALL CPUs (sar -u) —所有CPU的CPU使用率
sar -u 给出所有CPU的累积实时CPU使用率。”1 3″表示:每1秒报告一次,共报告3次。你可以通过最后一列的“%idle”(闲置百分比)来判断cpu的负载。
$ sar -u 1 3 显示结果: Linux 2.6.18-194.el5PAE (dev-db) 03/26/2011 _i686_ (8 CPU) 01:27:32 PM CPU %user %nice %system %iowait %steal %idle 01:27:33 PM all 0.00 0.00 0.00 0.00 0.00 100.00 01:27:34 PM all 0.25 0.00 0.25 0.00 0.00 99.50 01:27:35 PM all 0.75 0.00 0.25 0.00 0.00 99.00 Average: all 0.33 0.00 0.17 0.00 0.00 99.50
以下是一些参数:
- sar -u 显示当前天的CPU使用率,直到当前时间点。
- sar -u 1 3 显示实时 CPU 使用率, 每1秒报告一次,共报告3次。
- sar -u ALL 功能和“sar -u”相同,只是多显示几列性能指标。
- sar -u ALL 1 3 功能和“sar -u 1 3”相同,只是多显示几列性能指标。
- sar -u -f /var/log/sa/sa10 从/var/log/sa/下的sa10文件中获取并显示一个月中10号的CPU使用率。
2. CPU Usage of Individual CPU or Core (sar -P) —单个CPU或单核的CPU使用率
假如在你的机器上有4个核(CPU),并且想查看个别核的使用情况,请按照如下操作:
“-P ALL”表示:它应该显示所有单个核的统计数据
在接下来的例子中,“CPU”一列中的0,1,2,3表示对应的CPU核的编号。
$ sar -P ALL 1 1 显示结果: Linux 2.6.18-194.el5PAE (dev-db) 03/26/2011 _i686_ (8 CPU) 01:34:12 PM CPU %user %nice %system %iowait %steal %idle 01:34:13 PM all 11.69 0.00 4.71 0.69 0.00 82.90 01:34:13 PM 0 35.00 0.00 6.00 0.00 0.00 59.00 01:34:13 PM 1 22.00 0.00 5.00 0.00 0.00 73.00 01:34:13 PM 2 3.00 0.00 1.00 0.00 0.00 96.00 01:34:13 PM 3 0.00 0.00 0.00 0.00 0.00 100.00
“-P 1″表示:表明它会只显示第2核的统计数据。(注意:核的编号从0开始)
$ sar -P 1 1 1 显示结果: Linux 2.6.18-194.el5PAE (dev-db) 03/26/2011 _i686_ (8 CPU) 01:36:25 PM CPU %user %nice %system %iowait %steal %idle 01:36:26 PM 1 8.08 0.00 2.02 1.01 0.00 88.89
以下是一些参数:
- sar -P ALL 按所有核分解显示当前天的CPU使用率。
- sar -P ALL 1 3 实时显示所有核CPU使用率,每1秒报告一次,共报告3次(按所有核分解显示)。
- sar -P 1 显示当前天的核编号为1的CPU使用率。
- sar -P 1 1 3 实时显示核号为1,每1秒显示1次,共显示3次 的CPU使用率。
- sar -P ALL -f /var/log/sa/sa10 显示来自sa10文件,10号的CPU利用率,并且按所有核分解显示。
3. Memory Free and Used (sar -r) —内存空闲 和 内存使用
这个用来报告内存的统计数据。”1 3″表示:每1秒报告一次,共报告3次。你可以通过 “kbmemfree” 和 “kbmemused”两指标来得知 空闲内存 和 使用中内存。
$ sar -r 1 3 显示结果: Linux 2.6.18-194.el5PAE (dev-db) 03/26/2011 _i686_ (8 CPU) 07:28:06 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact 07:28:07 AM 6209248 2097432 25.25 189024 1796544 141372 0.85 1921060 88204 07:28:08 AM 6209248 2097432 25.25 189024 1796544 141372 0.85 1921060 88204 07:28:09 AM 6209248 2097432 25.25 189024 1796544 141372 0.85 1921060 88204 Average: 6209248 2097432 25.25 189024 1796544 141372 0.85 1921060 88204
以下是一些参数:
- sar -r
- sar -r 1 3
- sar -r -f /var/log/sa/sa10
4. Swap Space Used (sar -S) —交换空间的使用情况
这个用来报告交换空间的统计数据。”1 3″表示:每1秒报告一次,共报告3次。如果“kbswpused” 和 “%swpused”都是0,则系统没发生交换。
$ sar -S 1 3 显示结果: Linux 2.6.18-194.el5PAE (dev-db) 03/26/2011 _i686_ (8 CPU) 07:31:06 AM kbswpfree kbswpused %swpused kbswpcad %swpcad 07:31:07 AM 8385920 0 0.00 0 0.00 07:31:08 AM 8385920 0 0.00 0 0.00 07:31:09 AM 8385920 0 0.00 0 0.00 Average: 8385920 0 0.00 0 0.00
以下是一些参数:
- sar -S
- sar -S 1 3
- sar -S -f /var/log/sa/sa10
注意:
- 使用“sar -r”来确定 空闲的、使用的 和 缓存 的内存页,在系统内(/秒)的数量情况。
- 使用“sar -H”来识别 已使用 和 可用 的大内存页(hugepages) (单位:KB)。
- 使用“sar -B”生成分页数据,即每秒有多少KB的数据页从硬盘写入或读出。
- 使用“sar -W”生成交换页数据,即每秒有多少交换页。
5. Overall I/O Activities (sar -b) —总体的I/O活动
这个用来报告I/O(输入输出)的统计数据。”1 3″表示:每1秒报告一次,共报告3次。
以下字段出现在下面的例子中:
- tps – 每秒处理事务数 (包括读和写,又叫做 系统吞吐量)。
- rtps – 每秒读事务的数量。
- wtps – 每秒写事务的数量。
- bread/s – 每秒读字节数。
- bwrtn/s – 每秒写字节数。
$ sar -b 1 3 显示结果: Linux 2.6.18-194.el5PAE (dev-db) 03/26/2011 _i686_ (8 CPU) 01:56:28 PM tps rtps wtps bread/s bwrtn/s 01:56:29 PM 346.00 264.00 82.00 2208.00 768.00 01:56:30 PM 100.00 36.00 64.00 304.00 816.00 01:56:31 PM 282.83 32.32 250.51 258.59 2537.37 Average: 242.81 111.04 131.77 925.75 1369.90
以下是一些参数:
- sar -b
- sar -b 1 3
- sar -b -f /var/log/sa/sa10
注意:用“sar -v”显示 inode handlers, file handlers 和 pseudo-terminals 的数量
6. Individual Block Device I/O Activities (sar -d) —单个的I / O块设备活动
识别单个的块设备活动情况(即 特定的挂载点 或 逻辑单元号 或 分区)
$ sar -d 1 1 显示结果: Linux 2.6.18-194.el5PAE (dev-db) 03/26/2011 _i686_ (8 CPU) 01:59:45 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 01:59:46 PM dev8-0 1.01 0.00 0.00 0.00 0.00 4.00 1.00 0.10 01:59:46 PM dev8-1 1.01 0.00 0.00 0.00 0.00 4.00 1.00 0.10 01:59:46 PM dev120-64 3.03 64.65 0.00 21.33 0.03 9.33 5.33 1.62 01:59:46 PM dev120-65 3.03 64.65 0.00 21.33 0.03 9.33 5.33 1.62 01:59:46 PM dev120-0 8.08 0.00 105.05 13.00 0.00 0.38 0.38 0.30 01:59:46 PM dev120-1 8.08 0.00 105.05 13.00 0.00 0.38 0.38 0.30 01:59:46 PM dev120-96 1.01 8.08 0.00 8.00 0.01 9.00 9.00 0.91 01:59:46 PM dev120-97 1.01 8.08 0.00 8.00 0.01 9.00 9.00 0.91
在上面的例子中,“DEV”表示:特定的块设备。
例如:“dev53-1″表示:53号主设备号,1号分设备号。
设备名称(DEV列)可以显示实际的设备名称(例如:sda sda1,sdb1等) ,如果加上 -p 参数,将显示如下:
$ sar -p -d 1 1 显示结果: Linux 2.6.18-194.el5PAE (dev-db) 03/26/2011 _i686_ (8 CPU) 01:59:45 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 01:59:46 PM sda 1.01 0.00 0.00 0.00 0.00 4.00 1.00 0.10 01:59:46 PM sda1 1.01 0.00 0.00 0.00 0.00 4.00 1.00 0.10 01:59:46 PM sdb1 3.03 64.65 0.00 21.33 0.03 9.33 5.33 1.62 01:59:46 PM sdc1 3.03 64.65 0.00 21.33 0.03 9.33 5.33 1.62 01:59:46 PM sde1 8.08 0.00 105.05 13.00 0.00 0.38 0.38 0.30 01:59:46 PM sdf1 8.08 0.00 105.05 13.00 0.00 0.38 0.38 0.30 01:59:46 PM sda2 1.01 8.08 0.00 8.00 0.01 9.00 9.00 0.91 01:59:46 PM sdb2 1.01 8.08 0.00 8.00 0.01 9.00 9.00 0.91
以下是一些参数:
- sar -d
- sar -d 1 3
- sar -d -f /var/log/sa/sa10
- sar -p -d
7. Display context switch per second (sar -w) —显示每秒上下文交换
这个用来报告每秒创建的进程总数 和 上下文交换数量。”1 3″表示:每1秒报告一次,共报告3次。
$ sar -w 1 3 显示结果: Linux 2.6.18-194.el5PAE (dev-db) 03/26/2011 _i686_ (8 CPU) 08:32:24 AM proc/s cswch/s 08:32:25 AM 3.00 53.00 08:32:26 AM 4.00 61.39 08:32:27 AM 2.00 57.00
下面是一些参数:
- sar -w
- sar -w 1 3
- sar -w -f /var/log/sa/sa10
8. Reports run queue and load average (sar -q) —运行中队列 和 平均负载的统计报告
这个用来报告最后1分钟、5分钟 和 15分钟的运行队列数量 以及 平均负载情况。”1 3″表示:每1秒报告一次,共报告3次。
$ sar -q 1 3 显示结果: Linux 2.6.18-194.el5PAE (dev-db) 03/26/2011 _i686_ (8 CPU) 06:28:53 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 06:28:54 AM 0 230 2.00 3.00 5.00 0 06:28:55 AM 2 210 2.01 3.15 5.15 0 06:28:56 AM 2 230 2.12 3.12 5.12 0 Average: 3 230 3.12 3.12 5.12 0
注意:“blocked” 列显示的是当前已经阻塞并等待I/O操作完成的任务数。
以下是一些参数:
- sar -q
- sar -q 1 3
- sar -q -f /var/log/sa/sa10
9. Report network statistics (sar -n) —网络统计报告
这个用来报告各种网络统计数据。例如:通过网卡接包(传送包)的数量、失败的数量 等。”1 3″表示:每1秒报告一次,共报告3次。
sar -n KEYWORD
KEYWORD 可以为下面的任意一个:
- DEV – 显示eth0, eth1等的网络设备的重要统计数据。
- EDEV – 显示网络设备的失败数据。
- NFS – 显示NFS(网络文件系统)客户端活动情况。
- NFSD – 显示NFS(网络文件系统)服务端活动情况。
- SOCK – 显示IPV4使用的套接字。
- IP – 显示IPv4 网络流量。
- EIP – 显示IPv4 网络错误。
- ICMP – 显示ICMPv4 网络流量。
- EICMP – 显示ICMPv4 网络错误。
- TCP – 显示 TCPv4 网络流量。
- ETCP – 显示 TCPv4 网络错误。
- UDP – 显示 UDPv4 网络流量。
- SOCK6, IP6, EIP6, ICMP6, UDP6 are for IPv6
- ALL – 这将显示以上所有信息,输出统计数据将非常长。
$ sar -n DEV 1 1 显示结果: Linux 2.6.18-194.el5PAE (dev-db) 03/26/2011 _i686_ (8 CPU) 01:11:13 PM IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s 01:11:14 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 01:11:14 PM eth0 342.57 342.57 93923.76 141773.27 0.00 0.00 0.00 01:11:14 PM eth1 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10. Report Sar Data Using Start Time (sar -s) —统计特定开始时间的Sar数据
当你用“sar -f”参数从/var/log/sa/saXX 文件中查看sar历史数据时,假如你使用“sar -s 10:00:00″,则显示从早上10点开始的sar数据,而不是23:53,正如下面案例。
你可以结合-s参数和其他sar参数。
例如:统计本月26号从早上10点开始的平均负载数据,下面结合-q 和 -s参数。
$ sar -q -f /var/log/sa/sa23 -s 10:00:01 显示结果: Linux 2.6.18-194.el5PAE (dev-db) 03/26/2011 _i686_ (8 CPU) 10:00:01 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 10:10:01 AM 0 127 2.00 3.00 5.00 0 10:20:01 AM 0 127 2.00 3.00 5.00 0 ... 11:20:01 AM 0 127 5.00 3.00 3.00 0 12:00:01 PM 0 127 4.00 2.00 1.00 0
没有参数可以指定结束时间,只能像下面一样去使用头命令:
例如:从早上10点开始,你只想看到7项,你必须在输出时使用过滤,加一句“head -n 10″。
$ sar -q -f /var/log/sa/sa23 -s 10:00:01 | head -n 10 显示结果: Linux 2.6.18-194.el5PAE (dev-db) 03/26/2011 _i686_ (8 CPU) 10:00:01 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 10:10:01 AM 0 127 2.00 3.00 5.00 0 10:20:01 AM 0 127 2.00 3.00 5.00 0 10:30:01 AM 0 127 3.00 5.00 2.00 0 10:40:01 AM 0 127 4.00 2.00 1.00 2 10:50:01 AM 0 127 3.00 5.00 5.00 0 11:00:01 AM 0 127 2.00 1.00 6.00 0 11:10:01 AM 0 127 1.00 3.00 7.00 2
Linux性能监控和调优还有很多,这只是很小的一部分,我们会用更多文章来展示。
