
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 环境中的资源管理有关的大多数任务。建议在您的环境中练习这些方法,以使您自己熟悉这些命令以及此处所述的选项。



本文地址:https://www.xxnet.eu.org/?post=111
版权声明:若无注明,本文皆为“点滴记忆---观雨亭”原创,转载请保留文章出处。

