在对 Web Server 做性能测试的时候, 除了需要给出 “最大并发请求数”、“平均响应时间” 等数据, 还需要给出系统资源的使用情况。例如, CPU 使用率、内存使用、负载等数据。
linux 自带了一个对系统资源监控的工具 sar, 即 system activity report. sar 包含在 sysstat 包中, 关于 sysstat 的介绍:
iostat
Reports CPU statistics and input/output statistics for devices, partitions and network filesystems.
mpstat
Reports individual or combined processor related statistics.
pidstat
Reports statistics for Linux tasks (processes) : I/O, CPU, memory, etc.
sar
Collects, reports and saves system activity information (CPU, memory, disks, interrupts, network interfaces, TTY, kernel tables,etc.)
sadc
Is the system activity data collector, used as a backend for sar.
sa1
Collects and stores binary data in the system activity daily data file. It is a front end to sadc designed to be run from cron.
sa2
Writes a summarized daily activity report. It is a front end to sar designed to be run from cron.
sadf
Displays data collected by sar in multiple formats (CSV, XML, etc.) This is useful to load performance data into a database, or import them in a spreadsheet to make graphs.
如果运行
$ sar
显示
Cannot open /var/log/sysstat/sa06: No such file or directory
Please check if data collecting is enabled in /etc/default/sysstat
则修改 /etc/default/sysstat 文件, 将 ENABLED 设置为 true.
看一下 manual 中对 sar 的描述:
测试:
先尝试一下 interval / count 这两个参数。(interval 以秒为单位)
$ sar 1 5
的输出结果:
Linux 2.6.35-23-generic (zhongwei-T-6845c) 12/06/2010 _i686_ (2 CPU)
04:40:02 PM CPU %user %nice %system %iowait %steal %idle
04:40:03 PM all 4.88 0.00 1.95 0.00 0.00 93.17
04:40:04 PM all 5.99 0.00 5.53 4.61 0.00 83.87
04:40:05 PM all 5.88 0.00 2.94 6.37 0.00 84.80
04:40:06 PM all 2.91 0.00 3.88 0.00 0.00 93.20
04:40:07 PM all 5.39 0.00 3.92 0.00 0.00 90.69
Average: all 5.02 0.00 3.67 2.22 0.00 89.09
zhongwei@zhongwei-T-6845c:~$
就是从此刻开始,每隔 1 秒钟输出一次 CPU 的状态信息,执行 5 次。
使用 sar 查看系统负载:
Linux 2.6.35-23-generic (zhongwei-T-6845c) 12/06/2010 _i686_ (2 CPU)
04:52:31 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
04:52:32 PM 0 360 0.40 0.48 0.40
04:52:33 PM 2 360 0.40 0.48 0.40
04:52:34 PM 0 360 0.40 0.48 0.40
04:52:35 PM 1 360 0.37 0.47 0.40
04:52:36 PM 1 360 0.37 0.47 0.40
Average: 1 360 0.39 0.48 0.40
zhongwei@zhongwei-T-6845c:~$
同时查看CPU 和 系统平均负载:
Linux 2.6.35-23-generic (zhongwei-T-6845c) 12/06/2010 _i686_ (2 CPU)
04:55:22 PM CPU %user %nice %system %iowait %steal %idle
04:55:23 PM all 2.90 0.48 2.90 0.00 0.00 93.72
04:55:22 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
04:55:23 PM 0 361 0.61 0.53 0.43
04:55:23 PM CPU %user %nice %system %iowait %steal %idle
04:55:24 PM all 4.37 0.49 3.88 0.00 0.00 91.26
04:55:23 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
04:55:24 PM 0 361 0.61 0.53 0.43
04:55:24 PM CPU %user %nice %system %iowait %steal %idle
04:55:25 PM all 4.76 0.48 5.24 0.00 0.00 89.52
04:55:24 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
04:55:25 PM 1 361 0.56 0.52 0.43
04:55:25 PM CPU %user %nice %system %iowait %steal %idle
04:55:26 PM all 3.92 0.98 1.96 0.00 0.00 93.14
04:55:25 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
04:55:26 PM 1 361 0.56 0.52 0.43
04:55:26 PM CPU %user %nice %system %iowait %steal %idle
04:55:27 PM all 3.43 0.49 3.43 0.00 0.00 92.65
04:55:26 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
04:55:27 PM 0 361 0.56 0.52 0.43
Average: CPU %user %nice %system %iowait %steal %idle
Average: all 3.88 0.58 3.49 0.00 0.00 92.05
Average: runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
Average: 0 361 0.58 0.52 0.43
zhongwei@zhongwei-T-6845c:~$
使用 sar 收集内存使用状况:
[1] 4644
zhongwei@zhongwei-T-6845c:~$ tail -f mem.txt
Linux 2.6.35-23-generic (zhongwei-T-6845c) 12/06/2010 _i686_ (2 CPU)
05:15:37 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
05:15:38 PM 863752 1195976 58.06 78828 645112 1992556 24.94
05:15:39 PM 863744 1195984 58.07 78828 645112 1992556 24.94
05:15:40 PM 863744 1195984 58.07 78832 645112 1992556 24.94
05:15:41 PM 863744 1195984 58.07 78836 645112 1992556 24.94
05:15:42 PM 863620 1196108 58.07 78836 645112 1992556 24.94
05:15:43 PM 863612 1196116 58.07 78836 645112 1992876 24.95
下面来解决一下实际问题:
在性能测试的时候, 我们一定会想一次性的将 CPU、内存、负载情况同时抓取到, 但是采用
$ sar -u -r -q 1 100
数据的显示格式。。。混杂在了一起,不方便每项数据单独成图。
于是,写这样一个 shell 脚本:
sar -r 1 10 > ./mem.csv &
sar -q 1 10 > ./load.csv &
chmod +x sar_cpu_mem_load.sh ./sar_cpu_mem_load.sh
好了, 我们就得到了想要收集的数据。但是。。。。, 如果我想将数据转换成更直观的图表呢?
按照 google 的搜索结果, 先尝试了一下 ksar.
BUG 多的简直不能忍,按照 bug 报告的提示从 5.0.6 版本换到 5.1.0, 又到 5.1.0 beta4. 各种 bug, 例如对 CPU all 字段的不支持,对不同时间日期格式的不支持。就为了这么个烂工具, 我还特意装了 jre.
算了,还是使用 OpenOffice 的 SpreadSheet 比较靠谱。选中某一列, insert -> chart 就好了。
参考列表:
http://www.go2linux.org/sysstat-linux-performance-monitor-toolkit