linux常用系统性能监控工具[转](3)-sar

0:25 星期二 eehello 发表于 linux 分类,标签: 性能监控

0

sar

通过前面的讨论,我们发现:获取实时指标并不是唯一重要的事情;历史趋势也同等重要。

此外,考虑这样一种情况:有人多次报告某个性能问题,但当您进行调查时发现一切都回归正常。如果没有当时的任何具体数据,则很难诊断过去出现的性能问题。最后,您将希望检查过去几天的性能数据,以决定某些设置或进行调整。

sar 实用程序实现了这个目标。sar 代表 System Activity Recorder,它在一个特殊的位置(/var/log/sa 目录)记录 Linux 系统的主要组件(CPU、内存、磁盘、网络等)的指标。每天的数据记录在一个名为 sa 的文件中,其中  是每月中的第 nn 天(两位数字)。例如,文件 sa27 包含该月第 27 日的数据。可以通过 sar 命令查询该数据。

使用 sar 的最简单方法是不带任何参数或选项。示例如下:

# sar

Linux 2.6.9-55.0.9.ELlargesmp (prolin3)     12/27/2008

12:00:01 AM       CPU     %user     %nice   %system   %iowait     %idle

12:10:01 AM       all     14.99      0.00      1.27      2.85     80.89

12:20:01 AM       all     14.97      0.00      1.20      2.70     81.13

12:30:01 AM       all     15.80      0.00      1.39      3.00     79.81

12:40:01 AM       all     10.26      0.00      1.25      3.55     84.93

... and so on ...

输出显示在 10 分钟的间隔内收集的与 CPU 有关的指标。这些列的含义如下:

CPU

CPU 标识符;“all”表示所有 CPU

%user

用户进程使用的 CPU 百分比。Oracle 进程属于这一类。

%nice

在 nice 优先级下执行的 CPU 利用率百分比

%system

执行系统进程的 CPU 百分比

%iowait

等待进行 I/O 操作的 CPU 百分比

%idle

等待工作的 CPU 空闲百分比

从以上输出,您可能以为系统已经得到了很好的平衡;但实际上是严重利用不足(从较高的空闲百分比可以看出)。进一步查看输出,我们看到以下内容:

... continued from above ...

03:00:01 AM       CPU     %user     %nice   %system   %iowait     %idle

03:10:01 AM       all     44.99      0.00      1.27      2.85     40.89

03:20:01 AM       all     44.97      0.00      1.20      2.70     41.13

03:30:01 AM       all     45.80      0.00      1.39      3.00     39.81

03:40:01 AM       all     40.26      0.00      1.25      3.55     44.93

... and so on ...

这告诉我们另外一回事:在 3:00 和 3:40 之间某些用户进程加载了该系统。可能是在执行开销比较大的查询,也可能是正在运行某个 RMAN 作业,从而消耗了这么多 CPU。这就是 sar 命令非常有用之处,该命令重放记录的数据,显示从某个特定时间起而不是现在的数据。这样您就完全实现了在该部分开头所述的三个目标:获取历史数据、查找使用模式以及了解趋势。

如果您想查看特定日期的 sar 数据,只需使用下面所示的 -f 选项打开具有该文件名的 sar(打开第 26 日的数据)

# sar -f /var/log/sa/sa26

与 vmstat 或 mpstat 一样,该命令还可以显示实时数据。要每隔 5 秒获取一次数据,共 10 次,请使用:

# sar 5 10Linux 2.6.9-55.0.9.ELlargesmp (prolin3)     12/27/2008

01:39:16 PM       CPU     %user     %nice   %system   %iowait     %idle

01:39:21 PM       all     20.32      0.00      0.18      1.00     78.50

01:39:26 PM       all     23.28      0.00      0.20      0.45     76.08

01:39:31 PM       all     29.45      0.00      0.27      1.45     68.83

01:39:36 PM       all     16.32      0.00      0.20      1.55     81.93

… and so on 10 times …

您注意到 CPU 下的“all”值了吗?它意味着是所有 CPU 的总计统计信息。这比较适合单处理器系统,但在多处理器系统中,您可能希望获取各个 CPU 的统计信息以及总计统计信息。-P ALL 选项可以实现该目标。

#sar -P ALL 2 2

Linux 2.6.9-55.0.9.ELlargesmp (prolin3)     12/27/2008

01:45:12 PM       CPU     %user     %nice   %system   %iowait     %idle

01:45:14 PM       all     22.31      0.00     10.19      0.69     66.81

01:45:14 PM         0      8.00      0.00     24.00      0.00     68.00

01:45:14 PM         1     99.00      0.00      1.00      0.00      0.00

01:45:14 PM         2      6.03      0.00     18.59      0.50     74.87

01:45:14 PM         3      3.50      0.00      8.50      0.00     88.00

01:45:14 PM         4      4.50      0.00     14.00      0.00     81.50

01:45:14 PM         5     54.50      0.00      6.00      0.00     39.50

01:45:14 PM         6      2.96      0.00      7.39      2.96     86.70

01:45:14 PM         7      0.50      0.00      2.00      2.00     95.50

01:45:14 PM       CPU     %user     %nice   %system   %iowait     %idle

01:45:16 PM       all     18.98      0.00      7.05      0.19     73.78

01:45:16 PM         0      1.00      0.00     31.00      0.00     68.00

01:45:16 PM         1     37.00      0.00      5.50      0.00     57.50

01:45:16 PM         2     13.50      0.00     19.00      0.00     67.50

01:45:16 PM         3      0.00      0.00      0.00      0.00    100.00

01:45:16 PM         4      0.00      0.00      0.50      0.00     99.50

01:45:16 PM         5     99.00      0.00      1.00      0.00      0.00

01:45:16 PM         6      0.50      0.00      0.00      0.00     99.50

01:45:16 PM         7      0.00      0.00      0.00      1.49     98.51

Average:          CPU     %user     %nice   %system   %iowait     %idle

Average:          all     20.64      0.00      8.62      0.44     70.30

Average:            0      4.50      0.00     27.50      0.00     68.00

Average:            1     68.00      0.00      3.25      0.00     28.75

Average:            2      9.77      0.00     18.80      0.25     71.18

Average:            3      1.75      0.00      4.25      0.00     94.00

Average:            4      2.25      0.00      7.25      0.00     90.50

Average:            5     76.81      0.00      3.49      0.00     19.70

Average:            6      1.74      0.00      3.73      1.49     93.03

Average:            7      0.25      0.00      1.00      1.75     97.01

这表示 CPU 标识符(以 0 开头)以及每个 CPU 的统计信息。在输出的结尾处,您将看到每个 CPU 的平均运行情况。

命令 sar 不仅用于获取与 CPU 有关的统计信息。对于获取与内存有关的统计信息也非常有用。-r 选项显示大量利用内存的情况。

# sar -r

Linux 2.6.9-55.0.9.ELlargesmp (prolin3)     12/27/2008

12:00:01 AM kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused  kbswpcad

12:10:01 AM    712264  32178920     97.83   2923884  25430452  16681300     95908      0.57       380

12:20:01 AM    659088  32232096     98.00   2923884  25430968  16681300     95908      0.57       380

12:30:01 AM    651416  32239768     98.02   2923920  25431448  16681300     95908      0.57       380

12:40:01 AM    651840  32239344     98.02   2923920  25430416  16681300     95908      0.57       380

12:50:01 AM    700696  32190488     97.87   2923920  25430416  16681300     95908      0.57       380

让我们看一看每个列的含义:

kbmemfree

此时可用内存的数量,以 KB 为单位

kbmemused 

此时已使用的内存数量,以 KB 为单位

%memused

已使用内存的百分比

kbbuffers 

用作缓冲区的内存百分比

kbcached

用作缓存的内存百分比

kbswpfree

此时可用交换区空间的大小,以 KB 为单位

kbswpused 

此时已使用的交换空间大小,以 KB 为单位

%swpused 

此时已使用交换区的百分比

kbswpcad

此时缓存的交换区大小,以 KB 为单位

在输出的结尾处,您将看到该时间段内的平均数字。

还可以获取与特定内存有关的统计信息。-B 选项显示与分页有关的活动。

# sar -B

Linux 2.6.9-55.0.9.ELlargesmp (prolin3)     12/27/2008

12:00:01 AM  pgpgin/s pgpgout/s   fault/s  majflt/s

12:10:01 AM    134.43    256.63   8716.33      0.00

12:20:01 AM    122.05    181.48   8652.17      0.00

12:30:01 AM    129.05    253.53   8347.93      0.00

... and so on ...

该列显示当时 而不是现在的指标。

pgpgin/s

每秒从磁盘分到内存中的页面数

pgpgout/s

每秒从内存分到磁盘的页面数

fault/s

每秒的页面故障数

majflt/s

每秒的主要页面故障数

要获得与交换有关活动的类似输出,可以使用 -W 选项。

# sar -W

Linux 2.6.9-55.0.9.ELlargesmp (prolin3)     12/27/2008

12:00:01 AM  pswpin/s pswpout/s

12:10:01 AM      0.00      0.00

12:20:01 AM      0.00      0.00

12:30:01 AM      0.00      0.00

12:40:01 AM      0.00      0.00

... and so on ...

尽管这些列可能无需加以说明,下面还是提供了每列的说明:

pswpin/s

每秒从磁盘交换回内存的内存页数

pswpout/s

每秒从内存交换到磁盘的内存页数

如果您看到交换很多,则表示可能有内存不足问题。这不是定论,而是出现问题的可能性比较大。

要获得磁盘设备的统计,请使用 -d 选项:

# sar -d

Linux 2.6.9-55.0.9.ELlargesmp (prolin3)     12/27/2008

12:00:01 AM       DEV       tps  rd_sec/s  wr_sec/s

12:10:01 AM    dev1-0      0.00      0.00      0.00

12:10:01 AM    dev1-1      5.12      0.00    219.61

12:10:01 AM    dev1-2      3.04     42.47     22.20

12:10:01 AM    dev1-3      0.18      1.68      1.41

12:10:01 AM    dev1-4      1.67     18.94     15.19

... and so on ...

Average:      dev8-48      4.48    100.64     22.15

Average:      dev8-64      0.00      0.00      0.00

Average:      dev8-80      2.00     47.82      5.37

Average:      dev8-96      0.00      0.00      0.00

Average:     dev8-112      2.22     49.22     12.08

下面是对各列的说明。同样,它们也表示当时的指标。

tps

每秒进行的传输数。传输数就是 I/O 操作数。注:这只是操作数量,每个操作可能很大,也可能很小。因此,单独这个并不能说明全部问题。

rd_sec/s

每秒从磁盘读取的扇区数

wr_sec/s

每秒写入磁盘的扇区数

要获得历史网络统计信息,使用 -n 选项:

# sar -n DEV | more

Linux 2.6.9-42.0.3.ELlargesmp (prolin3)     12/27/2008

12:00:01 AM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s

12:10:01 AM        lo      4.54      4.54    782.08    782.08      0.00      0.00      0.00

12:10:01 AM      eth0      2.70      0.00    243.24      0.00      0.00      0.00      0.99

12:10:01 AM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

12:10:01 AM      eth2      0.00      0.00      0.00      0.00      0.00      0.00      0.00

12:10:01 AM      eth3      0.00      0.00      0.00      0.00      0.00      0.00      0.00

12:10:01 AM      eth4    143.79    141.14  73032.72  38273.59      0.00      0.00      0.99

12:10:01 AM      eth5      0.00      0.00      0.00      0.00      0.00      0.00      0.00

12:10:01 AM      eth6      0.00      0.00      0.00      0.00      0.00      0.00      0.00

12:10:01 AM      eth7      0.00      0.00      0.00      0.00      0.00      0.00      0.00

12:10:01 AM     bond0    146.49    141.14  73275.96  38273.59      0.00      0.00      1.98

… and so on …

Average:        bond0    128.73    121.81  85529.98  27838.44      0.00      0.00      1.98

Average:         eth8      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:         eth9      3.52      6.74    251.63  10179.83      0.00      0.00      0.00

Average:         sit0      0.00      0.00      0.00      0.00      0.00      0.00      0.00

总而言之,使用 sar 命令的这些选项可以获得组件的指标:

使用该选项 …

… 获得有关以下组件的统计信息:

-P

特定 CPU

-d

磁盘

-r

内存

-B

分页

-W

交换

-n

网络

是否希望在一个输出中获得所有可用的统计信息?不必使用所有这些选项调用 sar,您可以改用 -A 选项,该选项显示存储在 sar 文件中的所有统计信息。

结论

总之,使用这些有限的命令集,可以处理与 Linux 环境中的资源管理有关的大多数任务。建议在您的环境中练习这些方法,以使您自己熟悉这些命令以及此处所述的选项。




发表评论: