优化命令----sar命令
Sar是一个Linux下的监控工具,一直站在鄙视链的顶端。但是往往因繁多的参数,让人望而生畏,不知道怎么使用。然而这么强大命令并非是无章可循,只要我们找到合适的切入点来分析这个工具,就会发现实际上是非常简单的。sar命令很简单,它的参数主要分为四部分。其中,第二部分和第三、四部分,是可选的,也就是说,最终要的参数,就剩下一个,那就是选项。不带选项默认是-u。Sar的参数众多,想要一个参数一个参数的
目录
2.1 sar -u 1 3 或 sar 1 3 (1:每隔一秒刷新一次,3:刷新3次)
前言
Sar是一个Linux下的监控工具,一直站在鄙视链的顶端。但是往往因繁多的参数,让人望而生畏,不知道怎么使用。然而这么强大命令并非是无章可循,只要我们找到合适的切入点来分析这个工具,就会发现实际上是非常简单的。
一、sar 概述
1.1 sar 的格式
sar命令很简单,它的参数主要分为四部分。其中,第二部分和第三、四部分,是可选的,也就是说,最终要的参数,就剩下一个,那就是选项。不带选项默认是-u。
- 选项,也就是我们要获取的是哪个类型的指标数据,这里的-n,代表的是监控一些网络信息
- 类型参数,有的类型带有参数,有的没有。这里的DEV,代表的是监控网卡信息
- 时间间隔,表示多少秒采样一次数据,这里的1就是1秒
- 次数,表示采样的次数。比如时间间隔是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这些命令,从来没有无敌的工具,真正厉害的是灵活运用工具的我们。
更多推荐
所有评论(0)