日期:2014-05-16  浏览次数:20935 次

linux使用sar命令进行系统监视优化

了解如何将用户抱怨与系统活动报告程序 (SAR) 关联,并使用 SAR 日志针对趋势建立性能基准。SAR 是系统管理员的理想工具。它以周期性的间隔捕获系统性能度量。
用户总是在出现性能问题之后才想到它们。“为什么有些问题以前并不重要,而现在却变得重要了呢?”,如果忽略这样的问题,那么问题就变成了“系统在出现所谓的问题时状态如何呢?”。通过周期性地获取性能快照和查看数据,您就离确定问题的原因并创建相应的解决方案更近了一步。

收集数据

您的系统捆绑了 SAR 实用程序套件(事实上,大多数版本的 UNIX? 都安装了 SAR),但可能还没有启用。要启用 SAR,必须通过 cron 工具以周期性的间隔运行某些实用程序。在以 root 用户身份运行时,使用 crontab -e 命令,然后提供如清单 1 所示的配置。


清单 1. 以 root 用户运行 crontab 来启用 SAR 集合

# Collect measurements at 10-minute intervals
0,10,20,30,40,50?? * * * *?? /usr/lib/sa/sa1
# Create daily reports and purge old files
0????????????????? 0 * * *?? /usr/lib/sa/sa2 -A
?


第一个命令 sa1,是调用 sadc 以将性能数据收集到二进制日志文件中的一个 Shell 脚本。sa1 命令还确保了每天都使用不同的文件,我将在时间是最重要的部分中对这一点进行解释。每隔十分钟运行一次该命令,这是粒度和系统性能影响之间的折衷办法。

第二个命令 sa2,是将当日二进制日志文件中所有的数据转储到文本文件的另一个 Shell 脚本,然后它将清除七天之前的所有日志文件。参数 -A 指定了从二进制文件中提取哪些数据转储到文本文件中。尽管可以阅读文本文件以查看系统该日的状态,但我将介绍如何更精确地查询二进制日志文件。

提取有用的信息

已经收集到了相应的数据,但是必须通过查询才能使其更有价值。不带选项运行 sar 命令,这将生成关于当日 CPU 使用情况的基本统计信息。清单 2 显示了不带任何选项的 sar 命令的输出结果。(在不同的平台中,可能会看到不同的列名。在一些 UNIX 版本中,sadc 命令将根据可用的信息来收集不同的数据。)这里的示例来自于 Sun Solaris 10,无论使用什么平台都是类似的,但列名可能会稍有不同。


清单 2. sar 的缺省输出(显示了 CPU 使用情况)

-bash-3.00$ sar

SunOS unknown 5.10 Generic_118822-23 sun4u??? 01/20/2006

00:00:01??? %usr??? %sys??? %wio?? %idle
00:10:00?????? 0?????? 0?????? 0???? 100
. cut ...
09:30:00?????? 4????? 47?????? 0????? 49

Average??????? 0?????? 1?????? 0????? 98
?


sar 命令输出中的每一行都是一项单独的度量,并且在最左边的列中显示了时间戳。其他列中则存放了相应的数据。(根据命令行所使用参数的不同,这些列也会有所不同。)在清单 2 中,CPU 使用情况被分解为四种类别:

%usr: CPU 花费在用户进程(如应用程序、Shell 脚本或与该用户进行的交互)上的时间的百分比。
%sys: CPU 用来执行核心任务的时间的百分比。在本示例中该数字比较大,这是因为我正从核心随机数生成器获取数据。
%wio: CPU 等待块设备(如磁盘)输入或输出的时间的百分比。

%idle: CPU 未进行任何有用操作的时间的百分比。
最后一行是所有数据点的平均值。然而,因为大多数系统都会在忙时间段后经历空闲时间段,所以平均值并不能反映完整的情况。

监视磁盘活动

同时,对磁盘活动也进行了监视。高磁盘使用率意味着,从磁盘请求数据的应用程序更有可能会被阻塞(暂停),直到磁盘为该进程做好准备。通常,解决方案涉及到将文件系统拆分到不同的磁盘或阵列。然而,第一步是要知道出现了问题。

sar -d 的输出显示了一个度量时间段内各种与磁盘相关的统计数据。为了更加简洁,清单 3 仅显示了硬盘驱动器的活动。


清单 3. sar -d 的输出(显示了磁盘活动)

$ sar -d

SunOS unknown 5.10 Generic_118822-23 sun4u??? 01/22/2006

00:00:01?? device?????? %busy?? avque?? r+w/s? blks/s? avwait? avserv
. cut ...
14:00:02?? dad0???????????? 31???? 0.6????? 78?? 16102???? 1.9???? 5.3
?????????? dad0,c??????????? 0???? 0.0?????? 0?????? 0???? 0.0???? 0.0
?????????? dad0,h?????????? 31???? 0.6????? 78?? 16102???? 1.9???? 5.3
?????????? dad1????????????? 0???? 0.0?????? 0?????? 1???? 1.6???? 1.3
?????????? dad1,a??????????? 0???? 0.0?????? 0?????? 1???? 1.6???? 1.3
?????????? dad1,b??????????? 0???? 0.0???