目录

前言

一、sar 概述

1.1 sar 的格式

1.2  常用用法

二、 CPU 信息

2.1   sar -u 1 3 或 sar 1 3  (1:每隔一秒刷新一次,3:刷新3次)

2.2  进程长度和CPU平均负载状态监控

 三、内存监控

四、 I/O和传送速率监控与磁盘使用情况

五、网络宽带监控

六、一些可能会用到的选项

七、stress压力测试工具

7.1   stress简介

7.2 stress安装

​编辑

八、压力测试实验

8.1  测试cpu占用率

8.2  测试内存占用率

8.3  测试I/O与传输速率与磁盘使用情况

8.4   检测网络流量

 九、 总结


前言

Sar是一个Linux下的监控工具,一直站在鄙视链的顶端。但是往往因繁多的参数,让人望而生畏,不知道怎么使用。然而这么强大命令并非是无章可循,只要我们找到合适的切入点来分析这个工具,就会发现实际上是非常简单的。

一、sar 概述

1.1 sar 的格式

       sar命令很简单,它的参数主要分为四部分。其中,第二部分和第三、四部分,是可选的,也就是说,最终要的参数,就剩下一个,那就是选项不带选项默认是-u。

  1. 选项,也就是我们要获取的是哪个类型的指标数据,这里的-n,代表的是监控一些网络信息
  2. 类型参数,有的类型带有参数,有的没有。这里的DEV,代表的是监控网卡信息
  3. 时间间隔,表示多少采样一次数据,这里的1就是1秒
  4. 次数,表示采样的次数。比如时间间隔是3,采样次数是4,那么sar命令将会阻塞12秒钟

Sar的参数众多,想要一个参数一个参数的记忆,不免会耗费大量时间。所以我们就需要一个切入点,讨论监控工具,不外乎就是监控系统资源,那么自然也就是磁盘、cpu、网络、内存、IO等。

默认监控: sar 1 1     //  CPU和IOWAIT统计状态

(1) sar -b 1 1        // IO传送速率

(2) sar -B 1 1        // 页交换速率

(3) sar -c 1 1        // 进程创建的速率

(4) sar -d 1 1        // 块设备的活跃信息

(5) sar -n DEV 1 1    // 网路设备的状态信息

(6) sar -n SOCK 1 1   // SOCK的使用情况

(7) sar -n ALL 1 1    // 所有的网络状态信息

(8) sar -P ALL 1 1    // 每颗CPU的使用状态信息和IOWAIT统计状态

(9) sar -q 1 1        // 队列的长度(等待运行的进程数)和负载的状态

(10) sar -r 1 1      // 内存和swap空间使用情况

(11) sar -R 1 1       // 内存的统计信息(内存页的分配和释放、系统每秒作为BUFFER使用内存页、每秒被cache到的内存页)

(12) sar -u 1 1       // CPU的使用情况和IOWAIT信息(同默认监控)

(13) sar -v 1 1       // inode, file and other kernel tablesd的状态信息

(14) sar -w 1 1       // 每秒上下文交换的数目

(15) sar -W 1 1       // SWAP交换的统计信息(监控状态同iostat 的si so)

(16) sar -x 2906 1 1  // 显示指定进程(2906)的统计信息,信息包括:进程造成的错误、用户级和系统级用户CPU的占用情况、运行在哪颗CPU上

(17) sar -y 1 1       // TTY设备的活动状态

(18) 将结果输出到文件(-o)和读取记录信息(-f)

(19) sar -h           // 查看帮助

1.2  常用用法

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 信息

2.1   sar -u 1 3 或 sar 1 3  (1:每隔一秒刷新一次,3:刷新3次)

也可以使用-p查看全天的

 

       在以上的显示当中,主要看%iowait和%idle,%iowait过高表示存在I/O瓶颈,即磁盘IO无法满足业务需求,如果%idle过低表示CPU使用率比较严重,需要结合内存使用等情况判断CPU是否瓶颈。

这里的%usr和-P的%user的区别在于%usr不包括虚拟机运行的时间

这里的%sys和-P的%system的区别在于%sys不包括各种软硬中断时间

2.2  进程长度和CPU平均负载状态监控

sar -q 1 3  (1:每隔一秒刷新一次,3:刷新3次)

参数说明:

输出项

详细说明

runq-sz

运行队列的长度(等待运行的进程数)

plist-sz

进程列表中进程(processes)和线程(threads)的数量

ldavg-1

最后1分钟的CPU平均负载,即将多核CPU过去一分钟的负载相加再除以核心数得出的平均值,5分钟和15分钟依此类推

ldavg-5

最后5分钟的CPU平均负载

ldavg-15

最后15分钟的CPU平均负载

blocked

表示等待I/O完成而被阻塞的任务总数,不为0则需要留意I/O是否存在性能瓶颈

 三、内存监控

sar -r 1 3 (1:每隔一秒刷新一次,3:刷3次)

kbmemfree:剩余内存总量

kbavail:可用内存总量,可用内存≈剩余内存+buffer+cache

kbmemused:使用的内存总量,使用量=总内存-剩余内存-buffer-cache-slab

kbbuffers:被内核用来作为buffer的内存量

kbcached:被内核用来作为cache的内存量

kbcommit:当前工作负载下,可以保证不出现内存不足的内存量

%commit:指kbcommit占内存/swap的百分率

kbactive:当前活跃内存量。除非万不得已,这部分内存才会被回收

kbinact:当前非活跃内存总量,当内存不足时,这部分内存最容易被内核收回

kbdirty:脏页大小,脏页指的是暂存于内存还没来得及持久化到硬盘的数据。可以使用sync刷入硬盘

 sar -W 1 3 SWAP交换的统计信息(监控状态同iostat 的si so)

pswpin/s:每秒换入swap的内存量

pswpout/s:每秒换出swap的内存量

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

四、 I/O和传送速率监控与磁盘使用情况

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

kbmemfree:剩余内存总量

kbavail:可用内存总量,可用内存≈剩余内存+buffer+cache

kbmemused:使用的内存总量,使用量=总内存-剩余内存-buffer-cache-slab

kbbuffers:被内核用来作为buffer的内存量

kbcached:被内核用来作为cache的内存量

kbcommit:当前工作负载下,可以保证不出现内存不足的内存量

%commit:指kbcommit占内存/swap的百分率

kbactive:当前活跃内存量。除非万不得已,这部分内存才会被回收

kbinact:当前非活跃内存总量,当内存不足时,这部分内存最容易被内核收回

kbdirty:脏页大小,脏页指的是暂存于内存还没来得及持久化到硬盘的数据。可以使用sync刷入硬盘

 Sar的I/O和磁盘使用情况是有点重合的

sar -b 1 3 (1:每隔一秒刷新一次,3:刷新3次)

 sar -d 1 3 (1:每隔一秒刷新一次,3:刷新3次)

sar -d 1 3 -p(1:每隔一秒刷新一次,3:刷新3次)

 参数-p可以打印出sda,hdc等磁盘设备名称,如果不用参数-p,设备节点则有可能是dev8-0,dev22-0 

1. avgqu-sz 的值较低时,设备的利用率较高。

2. %util I/O请求占用的CPU百分比,值越高,说明I/O越慢。

五、网络宽带监控

sar -n DEV 1 3

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

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

查看网络信息的参数还有很多,就不一一举例,毕竟大多数时候我们只和DEV打交道,这边我就把它举出来了。

1.DEV 网卡
2.EDEV 网卡 (错误)
3.NFS NFS 客户端
4.NFSD NFS 服务器
5.SOCK Sockets (套接字) (v4)
6.IP IP 流 (v4)
7.EIP IP 流 (v4) (错误)
8.ICMP ICMP 流 (v4)
9.EICMP ICMP 流 (v4) (错误)
10.TCP TCP 流 (v4)
11.ETCP TCP 流 (v4) (错误)
12.UDP UDP 流 (v4)
13.SOCK6 Sockets (套接字) (v6)
14.IP6 IP 流 (v6)
15.EIP6 IP 流 (v6) (错误)
16.ICMP6 ICMP 流 (v6)
17.EICMP6 ICMP 流 (v6) (错误)
18.UDP6 UDP 流 (v6)

六、一些可能会用到的选项

将结果输出到文件(-o)和读取记录信息(-f)

-f  可以读取二级制存储的数据文件,所以我们也可以用它来读取之前的日志文件中的系统数据

 查看保存的二进制结果文件

监控indo、文件和其他内核监控

sar -v 1 3

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

dentunusd:目录高速缓存中未被使用的条目数量
file-nr:文件句柄(file handle)的使用数量
inode-nr:索引节点句柄(inode handle)的使用数量
pty-nr:使用的pty数量

 内存分页监控

sar -B 1 3

pgpgin/s:表示每秒从磁盘或SWAP置换到内存的字节数(KB)
pgpgout/s:表示每秒从内存置换到磁盘或SWAP的字节数(KB)
fault/s:每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor)
majflt/s:每秒钟产生的主缺页数.
pgfree/s:每秒被放入空闲队列中的页个数
pgscank/s:每秒被kswapd扫描的页个数
pgscand/s:每秒直接被扫描的页个数
pgsteal/s:每秒钟从cache中被清除来满足内存需要的页个数
%vmeff:每秒清除的页(pgsteal)占总扫描页(pgscank+pgscand)的百分比
-s [h]:输出swap空间的使用率统计信息

kbswpfree:未使用的swap量

kbswpused:使用中的swap内存量

%swpused:使用中的swap内存量占总swap的百分率

kbswpcad:被swap缓存的内存量,这部分内存曾经被换出,现在又被换入但仍然位于swap空间

%swpcad:kbswpcad占kbswpused的百分率

 要判断系统瓶颈问题,有时需几个 sar 命令选项结合起来

怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看

怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sar -W 等来查看

怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看

七、stress压力测试工具

7.1   stress简介

stress是Linux的一个压力测试工具,可以对CPU、Memory、IO、磁盘进行压力测试。

7.2 stress安装

安装:

 yum install stress  -y

CPU测试

stress --cpu 2 --timeout 60
开启2个CPU进程执行sqrt计算,60秒后结束

 IO测试

stress --io 2 --timeout 60s
开启2个IO进程,执行sync系统调用,刷新内存缓冲区到磁盘

使用stress无法模拟iowait升高,但sys升高。stress -i参数表示通过系统调用sync来模拟IO问题,但sync是刷新内存缓冲区数据到磁盘中,以确保同步。如果内存缓冲区内没多少数据,读写到磁盘中的数据也就不多,没法产生IO压力。使用SSD磁盘的环境中尤为明显,iowait一直为0,但因为大量系统调用,导致系统CPU使用率sys升高。

stress --io 2 --hdd 2 --timeout 60s
开启2个IO进程,2个磁盘IO进程

磁盘IO测试

stress --hdd 2 --hdd-bytes 10G --backoff 2000000
开启2个磁盘IO进程,每次写10GB数据到磁盘

八、压力测试实验

8.1  测试cpu占用率

 测试前数据

这里我们用stess命令测试 

这里可以看到我们的cpu空闲时间已经没有了

8.2  测试内存占用率

我们依旧是使用stress命令测试

stress --vm 2 --vm-bytes 1G --vm-hang 100 --timeout 100s

开启2个进程分配内存,每次分配1GB内存,保持100秒后释放,100秒后退出。

8.3  测试I/O与传输速率与磁盘使用情况

 -b   显示I/O和传送速率的统计信息

依旧是stress命令测试

stress --io 15 --hdd 15 --timeout 600

用stress命令模拟写入数据,可以看到此时的IO总数和写入速率

也可以用-d -p看的更加全面

8.4   检测网络流量

首先再本机上(192.168.111.20)安装httpd服务,并启动(注意一定要关闭防火墙)

sar -n DEV 1 1    // 网路设备的状态信息

这里我们可以用ab命令来测试

在这之前要先使用yum 安装ab命令

 再开一台虚拟机(192.168.111.30)

ab -c 1000 -n 50000 http://192.168.111.20/

-c表示并发用户数
-n表示请求总数

可以看到我们的接受和发送的数据都非常的大

 九、 总结

当然,sar命令虽然功能强大,在很多方面方面我们都可以使用sar来查询到我们需要的数据,但不是说我们就需用sar就可以了,对于系统的监控优化命令,当然是越多越好,很多时候我还是习惯使用top、free这些命令,从来没有无敌的工具,真正厉害的是灵活运用工具的我们。

Logo

更多推荐