Linux 状态命令之 sar

简介

sar(System Activity Reporter 系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘 I/O、CPU 效率、内存使用状况、进程活动及 IPC 有关的活动等。

我们可以使用sar命令来获得整个系统性能的报告。这有助于我们定位系统性能的瓶颈,并且有助于我们找出这些烦人的性能问题的解决方法。

Linux 内核维护着一些内部计数器,这些计数器包含了所有的请求及其完成时间和 I/O 块数等信息,sar命令从所有的这些信息中计算出请求的利用率和比例,以便找出瓶颈所在。

性能问题排查技巧:

  • 怀疑 CPU 存在瓶颈,可用sar -usar -q等来查看。
  • 怀疑 内存存在瓶颈,可用sar -Bsar -rsar -W等来查看。
  • 怀疑 I/O 存在瓶颈,可用sar -bsar -usar -d等来查看。

安装

sar命令来自于sysstat工具包,如果提示sar命令不存在,需先安装sysstat

yum install systat

语法

语法:sar [选项] [参数]

选项:
    -A:显示所有的报告信息;
    -b:显示I/O速率;
    -B:显示换页状态;
    -c:显示进程创建活动;
    -d:显示每个块设备的状态;
    -e:设置显示报告的结束时间;
    -f:从指定文件提取报告;
    -i:设状态信息刷新的间隔时间;
    -n:网络统计信息;
    -R:显示内存状态;
    -P:报告每个CPU的状态;
    -u:显示CPU整体的利用率;
    -v:显示索引节点,文件和其他内核表的状态;
    -w:显示交换分区状态;
    -x:显示给定进程的状态。

参数:
    间隔时间:每次报告的间隔时间(秒);
    次数:显示报告的次数。

示例

常用用法

  • sar [command] 2 5:每2秒输出一次 sar [command],总计输入五次,省略5表示持续输出。

  • sar -n DEV 1 -e 22:26:00 >/tmp/123 &:每秒采样一次网络情况直到22:26并把采样数据输出到/tmp/123。

  • sar -f /var/log/sa/sa27 -s 23:00:00 -e 00:00:00 -r:本月27日23点至0点的内存数据,需要通过crontab设置定时任务。

CPU 状态统计

-p

-P {CPU_LIST | ALL}:用于分析多核CPU的性能状况,可以使用CPU_LIST分析指定核心的CPU状态,可以使用离散值和连续值,也可以使用ALL分析所有CPU核心状态。

[fenglepeng@centos]# sar -P 0 1 3  # 表示每秒采集0号CPU状态,总共采样3次。
Linux 3.10.0-1160.11.1.el7.x86_64 (template-centos7) 	12/21/2022 	_x86_64_	(4 CPU)

11:15:32 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
11:15:33 AM       0      2.97      0.00      0.99      0.00      0.00     96.04
11:15:34 AM       0      1.02      0.00      1.02      0.00      0.00     97.96
11:15:35 AM       0      2.00      0.00      2.00      0.00      0.00     96.00
Average:          0      2.01      0.00      1.34      0.00      0.00     96.66
  • CPU:0 表示采集的是 0 号CPU,all 表示统计信息为所有 CPU 的平均值。
  • %user:指运行非特权用户进程时间百分率。
  • %nice:是指运行特权用户进程时间百分率。
  • %system:是指运行内核进程时间,这个时间包括了CPU处理软硬中断的时间。
  • %iowait:是指等待I/O完成的时间。
  • %steal:是指运行虚拟机的时间百分率,steal意味着被偷走的时间。
  • %idle:是指cpu空闲时间百分率,我的机器上并未运行任何程序,所以此列一直为100%。

注意说明:

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

-u

-u[ALL]:报告cpu使用情况,与-p不同的是,-u只能报告所有cpu。ALL选项输出详细信息。

[fenglepeng@centos]# sar -u 1 3
Linux 3.10.0-1160.11.1.el7.x86_64 (template-centos7) 	12/21/2022 	_x86_64_	(4 CPU)

11:18:56 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
11:18:57 AM     all      0.75      0.00      0.50      0.00      0.00     98.74
11:18:58 AM     all      0.75      0.00      1.00      0.00      0.00     98.25
11:18:59 AM     all      1.00      0.00      1.00      0.00      0.00     97.99
Average:        all      0.84      0.00      0.84      0.00      0.00     98.33
  • %usr:和-P的%user的区别在于%usr不包括虚拟机运行的时间。
  • %sys:和-P的%system的区别在于%sys不包括各种软硬中断时间。
  • %irq:是指处理硬中断的cpu时间百分率。
  • %soft:是指处理软中断的cpu时间百分率。
  • %guest%gnice:分别指运行普通虚拟程序和特权虚拟程序的时间百分率

-q

-q:用于报告队列长度以及平均负载。

[fenglepeng@centos]# sar -q 1 3
Linux 3.10.0-1160.11.1.el7.x86_64 (template-centos7) 	12/21/2022 	_x86_64_	(4 CPU)

11:21:52 AM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
11:21:53 AM         1       274      0.01      0.05      0.05         0
11:21:54 AM         2       274      0.01      0.05      0.05         0
11:21:55 AM         1       274      0.01      0.05      0.05         0
Average:            1       274      0.01      0.05      0.05         0
  • runq-sz:等待cpu调度的任务数。
  • plist-sz:处于任务列表的任务总数。
  • ldavg-1ldavg-5ldavg-15:分别指1分钟,5分钟,15分钟内cpu的负载。
  • blocked:表示等待I/O完成而被阻塞的任务总数,不为0则需要留意I/O是否存在性能瓶颈。

-w

-w:报告进程上下文切换的次数。

[fenglepeng@centos]# sar -w 1 3
Linux 3.10.0-1160.11.1.el7.x86_64 (template-centos7) 	12/21/2022 	_x86_64_	(4 CPU)

11:22:40 AM    proc/s   cswch/s
11:22:41 AM      1.00    470.00
11:22:42 AM      0.00    554.00
11:22:43 AM      1.00    576.00
Average:         0.67    533.33
  • proc/s:指每秒创建的进程数。
  • cswch/s:指每秒自愿上下文切换的次数,是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换。
    还有一个非自愿的上下文切换次数nvcswch/s表示则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。非自愿次数明显升高意味着cpu产生了性能瓶颈。非自愿上下文切换可以使用pidstat加上-w选项来输出。

内存状态统计

-r

-r [-h]:输出内存使用率统计信息,-h输出更加利于阅读的结果。

[fenglepeng@centos]# sar -r 1 3
Linux 3.10.0-1160.11.1.el7.x86_64 (template-centos7) 	12/21/2022 	_x86_64_	(4 CPU)

11:25:33 AM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
11:25:34 AM    267436   7722624     96.65         8   5884448   2678356     26.55   4260324   2498512        52
11:25:35 AM    267452   7722608     96.65         8   5884448   2678356     26.55   4260324   2498512        52
11:25:36 AM    267452   7722608     96.65         8   5884448   2678356     26.55   4260328   2498512        52
Average:       267447   7722613     96.65         8   5884448   2678356     26.55   4260325   2498512        52
  • kbmemfree:剩余内存总量。
  • kbavail:可用内存总量,可用内存≈剩余内存+buffer+cache。
  • kbmemused:使用的内存总量,使用量=总内存-剩余内存-buffer-cache-slab。
  • kbbuffers:被内核用来作为buffer的内存量。
  • kbcached:被内核用来作为cache的内存量。
  • kbcommit:当前工作负载下,可以保证不出现内存不足的内存量。
  • %commit:指kbcommit占内存/swap的百分率。
  • kbactive:当前活跃内存量。除非万不得已,这部分内存才会被回收。
  • kbinact:当前非活跃内存总量,当内存不足时,这部分内存最容易被内核收回。
  • kbdirty:脏页大小,脏页指的是暂存于内存还没来得及持久化到硬盘的数据。可以使用sync刷入硬盘。

-B

-B:报告系统中分页统计信息。

[fenglepeng@centos]#sar -B 1 3
Linux 3.10.0-1160.11.1.el7.x86_64 (template-centos7) 	12/21/2022 	_x86_64_	(4 CPU)

11:26:53 AM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
11:26:54 AM      0.00      0.00     37.00      0.00    108.00      0.00      0.00      0.00      0.00
11:26:55 AM      0.00      9.00     33.00      0.00     50.00      0.00      0.00      0.00      0.00
11:26:56 AM      0.00      9.00     23.00      0.00     63.00      0.00      0.00      0.00      0.00
Average:         0.00      6.00     31.00      0.00     73.67      0.00      0.00      0.00      0.00
  • pgpgin/s:表示每秒从磁盘中换入内存的字节数。
  • pgpgout/s:表示每秒从内存换出到磁盘的字节数。
  • fault/s:表示系统每秒产生的缺页异常(报告主缺页和次缺页),这不是产生I/O的缺页中断的次数,因为部分缺页中断不需要I/O就能处理。
  • majflt/s:表示每秒产生的主缺页异常。
  • pgfree/s:每秒被系统放到空闲列表的分页数量。
  • pgscank/s:每秒被内核线程[kswapd]扫描的分页数量。
  • pgscand/s:每秒被直接扫描的数量。
  • pgsteal/s:系统为满足其内存需求声明每秒从cache(分页缓存和swap缓存)回收的页的数量。
  • %vmeff:这个指标由pgsteal/(pgscand+pgscank)得到,这是一个衡量页面回收效率的指标。

-S

-s [h]:输出swap空间的使用率统计信息。

[fenglepeng@centos]# sar -S 1 3
Linux 3.10.0-1160.11.1.el7.x86_64 (template-centos7) 	12/21/2022 	_x86_64_	(4 CPU)

11:28:03 AM kbswpfree kbswpused  %swpused  kbswpcad   %swpcad
11:28:04 AM   2097148         0      0.00         0      0.00
11:28:05 AM   2097148         0      0.00         0      0.00
11:28:06 AM   2097148         0      0.00         0      0.00
Average:      2097148         0      0.00         0      0.00
  • kbswpfree:未使用的swap量。
  • kbswpused:使用中的swap内存量。
  • %swpused:使用中的swap内存量占总swap的百分率。
  • kbswpcad:被swap缓存的内存量,这部分内存曾经被换出,现在又被换入但仍然位于swap空间。
  • %swpcad:kbswpcad占kbswpused的百分率。

-W

-W 统计输出swap换入换出信息。

[fenglepeng@centos]#sar -W 1 3
Linux 3.10.0-1160.11.1.el7.x86_64 (template-centos7) 	12/21/2022 	_x86_64_	(4 CPU)

11:28:52 AM  pswpin/s pswpout/s
11:28:53 AM      0.00      0.00
11:28:54 AM      0.00      0.00
11:28:55 AM      0.00      0.00
Average:         0.00      0.00
  • pswpin/s:每秒换入swap的内存量。
  • pswpout/s:每秒换出swap的内存量。

若这两项数值很高,表示内存短缺导致需要频繁换入换出。

I/O篇状态统计

-b

-b:报告I/O及传输速率统计信息。

[fenglepeng@centos]#sar -b 1 3
Linux 3.10.0-1160.11.1.el7.x86_64 (template-centos7) 	12/21/2022 	_x86_64_	(4 CPU)

11:29:34 AM       tps      rtps      wtps   bread/s   bwrtn/s
11:29:35 AM      0.00      0.00      0.00      0.00      0.00
11:29:36 AM      0.00      0.00      0.00      0.00      0.00
11:29:37 AM      5.00      0.00      5.00      0.00     87.00
Average:         1.67      0.00      1.67      0.00     29.00
  • tps:每秒钟加到物理设备上的传输总量。一次传输就是加到物理设备的一次I/O请求,由于多次逻辑请求可以合并为单次的I/O请求,所以一次传输的大小是不确定的。
  • rtps:每秒加到物理设备的读请求总数。
  • wtps:每秒加到物理设备上的写请求总数。
  • dtps:每秒丢弃的请求总数。
  • bread/s:以块为单位每秒钟从磁盘读取的数据总量,块的大小等同于一个扇区的大小,512字节。
  • bwrtn/s:以块为单位每秒钟写入磁盘的数据总量。
  • bdscd/s以块为单位丢弃的数据总量。

-d

-d -h[--dev=dev_list]:报告块设备的活动情况。

[fenglepeng@centos]#sar -d 1 1
Linux 3.10.0-1160.11.1.el7.x86_64 (template-centos7) 	12/21/2022 	_x86_64_	(4 CPU)

11:30:26 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
11:30:27 AM    dev2-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
11:30:27 AM   dev8-16      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
11:30:27 AM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
11:30:27 AM  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
11:30:27 AM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:       dev2-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:      dev8-16      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:       dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:     dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:     dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
  • tps:和-btps含义一样,都表示每秒钟加到物理设备上的传输总量。
  • rkB/s:每秒从设备读到的字节数。
  • wkB/s:每秒写入设备的字节数。
  • areq-sz:加到设备上I/O请求平均大小(以字节为大小)。
  • aqu-sz:加到设备上请求长度的平均值。
  • await:加到设备上I/O请求的平均响应时间,这个时间包括了请求处于等待队列中的时间。
  • %util:加到设备上I/O请求所用的时间百分比,对于串行设备,接近100%意味着设备出现了性能瓶颈,但是对于并行设备比如RAID或者SSD,这个值实际上并不能反映出设备的极限。

-v

-v:报告inode,文件以及其他内核表状态。

Linux 3.10.0-1160.11.1.el7.x86_64 (template-centos7) 	12/21/2022 	_x86_64_	(4 CPU)

11:31:03 AM dentunusd   file-nr  inode-nr    pty-nr
11:31:04 AM    259766      2112    252444         1
Average:       259766      2112    252444         1
  • dentunusd:目录缓存中未使用的缓存项数。
  • file-nr:系统使用的文件句柄数,查看目前使用的文件句柄数lsof|awk '{print $2}'|wc -l
  • inode-nr:系统使用的inode处理程序数。
  • pty-nr:打开的伪终端数,即几个人登陆了系统。

网络篇状态统计

-n

sar -n { DEV | EDEV | NFS | NFSD | SOCK | ALL },sar 提供六种不同的语法选项来显示网络信息。

  • DEV显示网络接口信息。
  • EDEV显示关于网络错误的统计数据。
  • NFS统计活动的NFS客户端的信息。
  • NFSD统计NFS服务器的信息。
  • SOCK显示套接字信息。
  • ALL显示所有5个开关。它们可以单独或者一起使用。

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

[fenglepeng@centos]# sar -n DEV 1 1
Linux 3.10.0-1160.11.1.el7.x86_64 (template-centos7) 	12/21/2022 	_x86_64_	(4 CPU)

11:31:48 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
11:31:49 AM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
11:31:49 AM    ens160     13.00      2.00      1.24      0.35      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:       ens160     13.00      2.00      1.24      0.35      0.00      0.00      0.00
  • IFACE:网络接口。
  • rxpck/s:每秒接收的报文数。
  • txpck/s:每秒发送的报文数。
  • rxkB/s:每秒接收的字节数,rxkB/s * 1024 / rxpck/s < 60B,意味着收到的是小包。
  • txkB/s:每秒发送的字节数。
  • rxcmp/s:每秒接收的压缩数据包数。
  • txcmp/s:每秒发送的压缩数据包数。
  • rxmcst/s:每秒接收的多播数据包数。
  • %ifutil:网络接口的利用率百分比,对于半双工接口,利用率使用rxkB/stxkB/s之和作为接口速度的百分比计算。对于全双工,这是rxkB/stxkB/s中的较大值。。

你可能感兴趣的:(linux,命令,linux,linux)