`

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       0       0     0.0     0.0
           dad1,c            0     0.0       0       0     0.0     0.0
 


和前面的示例一样,最左边的是时间。其他列如下:

device: 这是指正在进行测量的磁盘或磁盘分区。在 Sun Solaris 中,必须通过查找 /etc/path_to_inst 中所报告的名称将该磁盘转换为物理磁盘,然后将该信息交叉引用到 /dev/dsk 中的项目。在 Linux® 中,使用了磁盘设备的主从设备号。
%busy: 这是读取或写入设备的时间的百分比。

avque: 这是用来串行化磁盘活动的队列的平均深度。avque 的值越大,发生的阻塞就越多。
r+w/s、blks/s:这分别是用每秒的读或写操作和磁盘盘块来表示的磁盘活动。
avwait:这是磁盘读或写操作等待执行的平均时间(单位为毫秒)。
avserv:这是磁盘读或写操作所执行的平均时间(单位为毫秒)。
其中的一些数值,如 avwait 和 avserv 值,直接关系到用户体验。磁盘的高等待时间可能表示多个人正在竞争使用该磁盘,这一点可以通过高 avque 数值来证实。高 avserv 值表示磁盘的速度较慢。

其他度量

同时还收集了许多其他的项目,可使用相应的参数来查看它们:

-b 参数显示了缓冲区信息和使用缓冲区与必须写磁盘的比率。
-c 参数显示了系统调用分解为一些常用的调用,如 fork()、exec()、read() 和 write()。高进程创建会导致较差的性能,并且这是可能需要将一些应用程序转移到其他计算机的信号。
-g、-p 和 -w 参数显示了分页(交换)活动。高分页操作是内存缺乏的信号。特别地,-w 选项显示了进程切换的次数:高的数值表示计算机上运行的内容过多,该计算机在切换任务上花费了比实际工作更多的时间。
-q 参数显示了运行队列的大小,它与当时的平均负载相同。
-r 参数显示了一段时间的可用内存和交换空间。
每种 UNIX 版本都对 sar 实现了自己的度量集合和命令行参数。我介绍的这些都是比较常见的,并且代表了更加有用的元素。

时间是最重要的

到此为止,示例显示了当日的数据,它虽然具有相应的作用,但也存在着两个问题:

感兴趣的是一个小时内的数据,但获得的是一整天的。
需要返回到不同的日期。
正如前面看到的,sa1 将每天的数据保存到不同的文件中。查看 sa1 脚本,会发现所使用的目录,如果是 Sun Solaris 10,该目录为 /var/adm/sa。该目录中有一些文件,它们以“sa”或“sar”开头,后跟一个数字。这个数字表示一个月中的第几天,以“sar”开头的文件是该日数据的文本转储(由夜间运行的 sa2 所创建),而以“sa”开头的文件保存着数据的二进制版本。实际上,包含当前日期的文件是启动 sar 时所读取的文件。

为 sar 命令指定 -f 以选择要读取的文件。如果今天是一个月中的第 23 日,可以使用命令 sar -f /var/adm/sa/sa22 来读取 sa22 以查看昨天的数据。还可以传递介绍过的其他参数以访问不同类型的数据。

可以做的第二件事情是,通过使用 -s 和 -e 参数(即开始 和结束)来指定具体时间以缩小查询的范围。请注意,-s 并不是包含性的,所以必须从所选择的开始时间中多减去十分钟。继续前面的示例,清单 4 显示了交换文件的使用情况和从第 22 天的 2:30 p.m. 到 3:00 p.m 的运行队列。


清单 4. 指定了日期、时间和多数据集的复杂 sar 查询

# sar -f /var/adm/sa/sa22 -s 14:20 -e 15:00 -w -q -i 4

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

14:20:00 swpin/s bswin/s swpot/s bswot/s pswch/s
14:30:00    0.00     0.0    0.00     0.0     140
14:40:01    0.00     0.0    0.00     0.0     144
14:50:01    0.00     0.0    0.00     0.0     140
15:00:00    0.00     0.0    0.00     0.0     139

Average     0.00     0.0    0.00     0.0     140

14:20:00 runq-sz %runocc swpq-sz %swpocc
14:30:00    10.5     100     0.0       0
14:40:01    10.5     100     0.0       0
14:50:01    10.4     100     0.0       0
15:00:00    10.5     100     0.0       0

Average     10.5     100     0.0       0
 

 了解它的所有含义

简单查看一下清单 4,它显示出交换活动为零,每秒大约发生 140 次进程切换,并且平均负载略高于 10。假设您当时正在调查较差性能的要求,那么从这些数据中可以得到什么结论呢?

因为没有发现交换过程,无论在运行什么进程,它们并没有消耗大量的内存。
该问题可能是由一组长时间运行的进程所导致,因为运行队列和进程切换相对稳定。如果以前并不是这样,那么可以怀疑是应用程序级的问题,如繁忙的 Web 服务器。
由于了解到清单 3 的输出显示了同一时间段的其他数据,您可以查看某块使用频繁的磁盘(根据 sar -b 为百分之 31,同时每秒 16,000 个盘块)。该磁盘是 home 目录分区,根据用户想要完成的任务不同,他/她可能会遇到较慢的响应。
快速查看该时间段内的 CPU 使用情况,显示出系统大约占用了百分之 80 的 CPU,剩下的用于用户任务。作为系统管理员,可以通过下面三种方式使用这一信息:

回到前几天的日志中。在本例中,我发现问题开始于 1:00 p.m.,并于第二天早上结束。
尝试将该活动与任何可能在该日开始的 cron 工作关联。
尝试找到其趋势。查看另外几天的数据,我发现性能是正常的,这并不表示系统已经达到其上限。
在本例中,看来已经将问题隔离出来了,出于该原因,我有意地使用 Shell 脚本来运转磁盘以创建一些有趣的 sar 报告!然而发现了一个趋势,如在工作时间内 home 驱动器比较繁忙,关于该问题可能存在完成某项任务的调用。可能的解决方案包括,将 home 目录拆分到其他磁盘、安装高速磁盘或将其转移到其他地方,如 Network Attached Storage (NAS)。


如果系统没有安装相关工具可以到此下载:

http://rpm.pbone.net/index.php3/stat/3/limit/1/srodzaj/1/dl/40/search/config%28sysstat%29/field[]/1/field[]/2

sysstat

使用yum安装
#yum install sysstat

sysstat的安装包是:sysstat-5.0.5-1.i386.rpm,装完了sysstat-5.0.5-1.i386.rpm
后 就会有iostat、mpstat、sar、sa的功能,sysstat-5.0.5-1.i386.rpm

启动sysstat
/etc/init.d/sysstat start

设置sysstat自启动
#checkfig sysstat on

MPSTAT
MPSTAT -P ALL 2 3
mpstat是Multiprocessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不 但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。下面只介绍 mpstat与CPU相关的参数,mpstat的语法如下:
mpstat [-P {|ALL}] [internal [count]]
参数的含义如下:
参数 解释
-P {|ALL} 表示监控哪个CPU, cpu在[0,cpu个数-1]中取值
internal 相邻的两次采样的间隔时间
count 采样的次数,count只能和delay一起使用
当没有参数时,mpstat则显示系统启动以后所有信息的平均值。有interval时,第 一行的信息自系统启动以来的平均信息。从第二行开始,输出为前一个interval时间段的平均信息。与CPU有关的输出的含义如下:
参数 解释 从/proc/stat获得数据
CPU 处理器ID
user 在internal时间段里,用户态的CPU时间(%) ,不包含 nice值为负 进程 usr/total*100
nice 在internal时间段里,nice值为负进程的CPU时间(%) nice/total*100
system 在internal时间段里,核心时间(%) system/total*100
iowait 在internal时间段里,硬盘IO等待时间(%) iowait/total*100
irq 在internal时间段里,软中断时间(%) irq/total*100
soft 在internal时间段里,软中断时间(%) softirq/total*100
idle 在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间 (%) idle/total*100
intr/s 在internal时间段里,每秒CPU接收的中断的次数 intr/total*100
CPU总的工作时 间=total_cur=user+system+nice+idle+iowait+irq+softirq
total_pre=pre_user+ pre_system+ pre_nice+ pre_idle+ pre_iowait+ pre_irq+ pre_softirq
user=user_cur – user_pre
total=total_cur-total_pre
其中_cur 表示当前值,_pre表示interval时间前的值。上表中的所有值可取到两位小数点。
cat /proc/stat
“ctxt”给出了自系统启动以来CPU发生的上下文交换的次数。
“btime”给出了从系统启动到现在为止的时间,单位为秒。
“processes (total_forks) 自系统启动以来所创建的任务的个数目。
“procs_running”:当前运行队列的任务的数目。
“procs_blocked”:当前被阻塞的任务的数目。
============================
sysstat工具包提供的主要命令:iostat mpstat sar
sar的最后两个参数一般是interval count
1、sar -u 1 5
输出CPU使用情况的统计信息,每秒输出一次,一共输出100次
17时06分01秒       CPU     %user     %nice   %system   %iowait     %idle
17时06分02秒       all      1.27      0.00      0.51      1.01     97.22
17时06分03秒       all      0.00      0.00      0.00      0.00    100.00
17时06分04秒       all      0.00      0.00      0.00      0.00    100.00
17时06分05秒       all      0.25      0.00      0.00      0.00     99.75
17时06分06秒       all      0.00      0.00      0.00      0.51     99.49
Average:          all      0.30      0.00      0.10      0.30     99.29
CPU      all 表示统计信息为所有 CPU 的平均值。                                       
%user    显示在用户级别(application)运行使用 CPU 总时间的百分比。                  
%nice    显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。            
%system 在核心级别(kernel)运行所使用 CPU 总时间的百分比。      
%iowait 显示用于等待I/O操作占用 CPU 总时间的百分比。
%steal   管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle    显示 CPU 空闲时间占用 CPU 总时间的百分比。
tips:
若 %iowait 的值过高,表示硬盘存在I/O瓶颈
若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
若 %idle 的值持续低于 10,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU。
2、sar -b 1 5
显示I/O和传送速率的统计信息
17时09分07秒       tps      rtps      wtps   bread/s   bwrtn/s
17时09分08秒      3.12      3.12      0.00     25.00      0.00
17时09分09秒     89.58      6.25     83.33    141.67    733.33
17时09分10秒     42.71      9.38     33.33    141.67    600.00
17时09分11秒      2.11      2.11      0.00     16.84      0.00
17时09分12秒      1.04      0.00      1.04      0.00    175.00
Average:        27.77      4.18     23.59     65.14    302.30
tps     每秒钟物理设备的 I/O 传输总量                   
rtps    每秒钟从物理设备读入的数据总量                 
wtps    每秒钟向物理设备写入的数据总量                 
bread/s 每秒钟从物理设备读入的数据量,单位为 块/s   
bwrtn/s 每秒钟向物理设备写入的数据量,单位为 块/s   
3、sar -c
每秒钟创建的进程数
15时10分01秒      1.35
15时20分01秒      1.01
15时30分01秒      0.59
15时40分01秒      1.35
15时50分01秒      0.99
16时00分01秒      0.57
16时10分01秒      1.33
16时20分01秒      1.02
16时30分01秒      0.57
16时40分01秒      1.33
16时50分01秒      1.07
17时00分01秒      0.56
17时10分01秒      1.32
4、sar -n DEV 1 5
输出网络设备状态的统计信息
17时13分42秒     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s rxmcst/s
17时13分43秒      eth1   3669.70   4156.57 368362.63 2747714.14      0.00      0.00      0.00
17时13分44秒      eth1   2689.11   2585.15 289661.39 701461.39      0.00      0.00      0.00
17时13分45秒      eth1   3746.00   4077.00 415178.00 2605720.00      0.00      0.00      0.00
17时13分46秒      eth1   3096.00   3241.00 327916.00 1597320.00      0.00      0.00      0.00
17时13分47秒      eth1   2910.00   2834.00 312632.00 957903.00      0.00      0.00      0.00
Average:         eth1   3220.20   3375.60 342592.60 1717931.20      0.00      0.00      0.00
IFACE      网络设备名                          
rxpck/s    每秒接收的包总数                 
txpck/s    每秒传输的包总数                  
rxbyt/s    每秒接收的字节(byte)总数        
txbyt/s    每秒传输的字节(byte)总数        
rxcmp/s    每秒接收压缩包的总数              
txcmp/s    每秒传输压缩包的总数              
rxmcst/s   每秒接收的多播(multicast)包的总数
5、sar -q 1 5
输出进程队列长度和平均负载状态统计信息
17时16分28秒   runq-sz plist-sz   ldavg-1   ldavg-5 ldavg-15
17时16分29秒         0       160      0.26      0.11      0.03
17时16分30秒         0       160      0.26      0.11      0.03
17时16分31秒         0       160      0.24      0.11      0.03
17时16分32秒         0       160      0.24      0.11      0.03
17时16分33秒         0       160      0.24      0.11      0.03
Average:            0       160      0.25      0.11      0.03
runq-sz   运行队列的长度(等待运行的进程数)                                     
plist-sz 进程列表中进程(processes)和线程(threads)的数量                    
ldavg-1   最后1分钟的系统平均负载(System load average)                         
ldavg-5   过去5分钟的系统平均负载                                                
ldavg-15 过去15分钟的系统平均负载                                              
6、sar -r
输出内存和交换空间的统计信息
7、iostat
tps 每秒钟物理设备的 I/O 传输总 量。                                                                                          
Blk_read 读入的数据总量,单位为 块。                                                                                          
Blk_wrtn 写入的数据总量,单位为 块。                                                                                          
kB_read 读入的数据总量,单位为 KB。                                                                                           
kB_wrtn 写入的数据总量,单位为 KB。                                                                                           
MB_read 读入的数据总量,单位为 MB。                                                                                           
MB_wrtn 写入的数据总量,单位为 MB。                                                                                           
Blk_read/s 每秒从驱动器读入的数据量,单位为 块 /s。                                                                           
Blk_wrtn/s 每秒向驱动器写入的数据量,单位为 块 /s。                                                                           
kB_read/s 每秒从驱动器读入的数据量,单位为 KB/s。                                                                             
kB_wrtn/s 每秒向驱动器写入的数据量,单位为 KB/s。                                                                             
MB_read/s 每秒从驱动器读入的数据量,单位为 MB/s。                                                                             
MB_wrtn/s 每秒向驱动器写入的数据量,单位为MB/s。
rrqm/s 将读入请求合并后,每秒发送到设备的读入请求数。   
wrqm/s 将写入请求合并后,每秒发送到设备的写入请求数。
r/s 每秒发送到设备的读入请求 数。                                                                                             
w/s 每秒发送到设备的写入请求 数。                                                                                             
rsec/s 每秒从设备读入的扇区 数。                                                                                              
wsec/s 每秒向设备写入的扇区 数。                                                                                              
rkB/s 每秒从设备读入的数据量,单位为 KB/s。                                                                                  
wkB/s 每秒向设备写入的数据量,单位为 KB/s。                                                                                  
rMB/s 每秒从设备读入的数据量,单位为 MB/s。                                                                                  
wMB/s 每秒向设备写入的数据量,单位为 MB/s。                                                                                  
avgrq-sz 发送到设备的请求的平均大小,单位为扇 区。                                                                            
avgqu-sz 发送到设备的请求的平均队列长 度。                                                                                    
await I/O请求平均执行时间。包括发送请求和执行的时间。单位为毫 秒。                                                   
svctm 发送到设备的I/O请求的平均执行时间。单位为毫 秒。                                                                      
%util 在I/O请求发送到设备期间,占用CPU时间的百分比。用于显示设备的带宽利用率。当这个值接近100%时,表示设备带宽已经占满。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics