首页 > 代码库 > 服务器高负载分析-SAR命令

服务器高负载分析-SAR命令

服务器高负载原因?

下列项目的过度使用会直接导致高负载问题:

  • CPU
  • 内存(包括虚拟内存)
  • 磁盘I/O

SAR命令

sar是System Activity Reporter(系统活动情况报告)的缩写。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据;取样数据和分析的结果都可以存入文件,所需的负载很小。sar是目前Linux上最为全面的系统性能分析工具之一,可以从14个大方面对系统的活动进行报告,包括文件的读写情况、系统调用的使用情况、串口、CPU效率、内存使用状况、进程活动及IPC有关的活动等,使用也是较为复杂。

sar是查看操作系统报告指标的各种工具中,最为普遍和方便的;它有两种用法;

追溯过去的统计数据(默认)
周期性的查看当前数据

SAR常用选项

-b:报告I/O使用情况以及传输速率。(只适用于2.5及之前的内核,所以新内核有可能不支持这个选项)
-B:报告“页”使用情况
-c:报告进程创建情况
-d:报告每一个块设备的使用情况
(当你使用时,你会发现在DEV列有类似dev1-7格式的字符串,
其中1代表设备的主序号,n代表设备的从序号,
而且rd_sec/s列和wr_sec/s列的单位都是512bytes,也就是512B,也就是0.5KB)
-I:汇报中断情况
-n:汇报网络情况
-P:设定CPU
-q:汇报队列长度和负载信息
-r:汇报内存和交换区使用情况
-R:汇报内存情况
-u:汇报CPU使用情况
-v:汇报i节点、文件和其他内核表信息
-w:汇报系统上下文切换情况
-x:可以针对某个特定PID给出统计信息,
可以直接指定进程ID号;
也可以指定为SELF,这样就是检测sar进程本身;
如果设定为ALL,则表示汇报所有系统进程信息。
-X:汇报特定PID的子进程的信息
-y:设定TTY设备的信息。

SAR使用实例

查看平均负载

sar -q

指定-q后,就能查看运行队列中的进程数、系统上的进程大小、平均负载等;与其它命令相比,它能查看各项指标随时间变化的情况;

技术分享

  • runq-sz:运行队列的长度(等待运行的进程数)
  • plist-sz:进程列表中进程(processes)和线程(threads)的数量
  • ldavg-1:最后1分钟的系统平均负载 ldavg-5:过去5分钟的系统平均负载
  • ldavg-15:过去15分钟的系统平均负载

 

CPU利用率查看
sar -p (默认查看为当天)
sar -u 1 5 (每隔一秒写入5次)

技术分享

 
输出项说明:
CPU all 表示统计信息为所有 CPU 的平均值。
%user 显示在用户级别(application)运行使用 CPU 总时间的百分比。
%nice 显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。
%system 在核心级别(kernel)运行所使用 CPU 总时间的百分比。
%iowait 显示用于等待I/O操作占用 CPU 总时间的百分比。
%steal 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle 显示 CPU 空闲时间占用 CPU 总时间的百分比。

1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈
2. 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
3. 若 %idle 的值持续低于 10,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU。

内存利用率查看
sar -r 1 10
vmstat 1 10

技术分享
  • kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.
  • kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.
  • %memused:物理内存使用率,这个值是kbmemused和内存总量(不包括swap)的一个百分比.
  • kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.
  • kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).
  • %commit:这个值是kbcommit与内存总量(包括swap)的一个百分比.

 

技术分享

可用内存=free+buffers+cached 已用内存:userd-buffers-cached


磁盘I/O使用情况查看
iostat -x 1 10
等同于sar -d 1 10

技术分享

 

参数-p可以打印出sda,hdc等磁盘设备名称,如果不用参数-p,设备节点则有可能是dev8-0,dev22-0
tps:每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的.
rd_sec/s:每秒读扇区的次数.
wr_sec/s:每秒写扇区的次数
avgrq-sz:平均每次设备I/O操作的数据大小(扇区).
avgqu-sz:磁盘请求队列的平均长度.
await表示平均每次设备I/O操作的等待时间(以毫秒为单位)。
svctm表示平均每次设备I/O操作的服务时间(以毫秒为单位)。
%util表示一秒中有百分之几的时间用于I/O操作。
对以磁盘IO性能,一般有如下评判标准:
正常情况下svctm应该是小于await值的,而svctm的大小和磁盘性能有关,CPU、内存的负荷也会对svctm值造成影响,过多的请求也会间接的导致svctm值的增加。
await值的大小一般取决与svctm的值和I/O队列长度以及I/O请求模式,如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢,此时可以通过更换更快的硬盘来解决问题。
%util项的值也是衡量磁盘I/O的一个重要指标,如果%util接近100%,表示磁盘产生的I/O请求太多,I/O系统已经满负荷的在工作,该磁盘可能存在瓶颈。长期下去,势必影响系统的性能,可以通过优化程序或者通过更换更高、更快的磁盘来解决此问题。


网络流量情况分析
sar -n DEV 1 2

技术分享

sar命令使用-n选项可以汇报网络相关信息,可用的参数包括:DEV、EDEV、SOCK和FULL。

如果你使用DEV关键字,那么sar将汇报和网络设备相关的信息,如lo,eth0或eth1等,例如:

IFACE:就是网络设备的名称;
rxpck/s:每秒钟接收到的包数目
txpck/s:每秒钟发送出去的包数目
rxbyt/s:每秒钟接收到的字节数
txbyt/s:每秒钟发送出去的字节数
rxcmp/s:每秒钟接收到的压缩包数目
txcmp/s:每秒钟发送出去的压缩包数目
txmcst/s:每秒钟接收到的多播包的包数目

如果你使用SOCK关键字,则会针对socket连接进行汇报,例如:
$ sar -n SOCK 1 3
Linux 2.6.9 10/17/2009

技术分享

tcpsck:当前正在被使用于TCP的socket数目
udpsck:当前正在被使用于UDP的socket数目
rawsck:当前正在被使用于RAW的socket数目
ip-frag:当前的IP分片的数目

如果你使用FULL关键字,相当于上述DEV、EDEV和SOCK三者的综合。

让sar在某个特定时间结束

sar 1 0 -e 15:00:00 > data.txt
//每隔1秒记录CPU的使用情况,直到15点,数据将保存到data.txt文件中。(-e 参数表示结束时间,注意时间格式:必须为hh:mm:ss格式)

sar 1 0 -r -e 15:00:00 > data.txt
//每隔1秒记录内存使用情况,直到15点,数据将保存到data.txt文件中。

sar 1 0 -n DEV -e 15:00:00 > data.txt
//每隔1秒记录网络使用情况,直到15点,数据将保存到data.txt文件中。

 

要判断系统瓶颈问题,有时需几个 sar 命令选项结合起来
怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看
怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sar -W 等来查看
怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看

 

服务器高负载分析-SAR命令