当前位置: 欣欣网 > 码农

sar命令多少人没用过?又一个牛逼的Linux命令!

2024-03-12码农

关注上方 浩道Linux ,回复 资料 ,即可获取海量 L inux Python 网络通信、网络安全 等学习资料!

前言

大家好,这里是 浩道Linux ,主要给大家分享 L inux P ython 网络通信、网络安全等 相关的IT知识平台。

今天浩道跟大家分享一个功能强大的Linux命令---sar,这个命令对于分析Linux系统性能时,作用十分强大。 本文将通过介绍sar命令详细的参数选项,以及列举出它常用的性能分析命令,让大家真正做到拿来即用,看完就没有你不会用的!全文针对该命令详解罗列详细,大家可以收藏起来,用到时翻一翻,不会迷路。

一、sar命令介绍

sar命令(System Activity Reporter系统活动情况报告) 是目前Linux比较全的系统性能分析工具之一, 是Linux下的一个系统运行状态统计工具,主要用于收集、报告和保存系统活动信息。sar命令通过读取和报告系统活动计数器,帮助用户了解系统的性能状况。

sar命令可以从文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状态、进程活动等 多方面对系统的活动进行报告。 同时 sar 还可以配置配置信息收集历史指标。

sar命令相关特点如下:

1、全面监控: sar命令可以从多方面对系统的活动进行报告,包括文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。

2、连续取样: sar命令可以连续对系统取样,获得大量的取样数据,从而更准确地反映系统的运行状态。

3、数据保存: 除了将取样数据和分析结果直接显示在屏幕上,sar命令还可以将所选数据保存在指定的文件中,方便用户后续查看和分析。

4、低资源消耗: sar命令在运行时消耗的系统资源很小,不会对系统的正常运行造成太大影响。

二、sar命令安装

centos7系统下,sar默认没有安装,我们可以通过yum方式进行安装。

1、yum方式安装

由于sar是sysstat软件包中的一部分,故只需要安装sysstat即可。

yum install -y sysstat

待sysstat安装成功后,会在/etc/sysconfig路径下生成/etc/sysconfig/sysstat文件。

/etc/sysconfig/sysstat文件 默认的配置信息如下:

[root@haodaolinux02 ~]# cat /etc/sysconfig/sysstat# sysstat-10.1.5 configuration file.# How long to keep log files (in days).# If value is greater than 28, then log files are kept in# multiple directories, one for each month.HISTORY=28# Compress (using gzip or bzip2) sa and sar files older than (in days):COMPRESSAFTER=31# Parameters for the system activity data collector (see sadc manual page)# which are used for the generation of log files.SADC_OPTIONS="-S DISK"# Compression program to use.ZIP="bzip2"[root@haodaolinux02 ~]#

通过配置文件信息,可以看到默认值有收集数据保存时长,什么时候开始压缩,压缩方式以及保存方式等信息。这些信息可以根据系统性能监控指标的需求自定义进行修改。

其中 HISTORY=28 表示将性能日志文件保留多长时间,默认值是28天;

COMPRESSAFTER=31 表示确定sar文件在多少天后压缩文件,默认值为31天;

SADC_OPTIONS="-S DISK" 表示系统活动数据收集保存参数;

ZIP="bzip2" 表示数据文件压缩方式默认是bzip2;

三、sar命令用法及常见参数

(一)sar命令用法

通过帮助命令可以看到sar命令相关参数选项,如下所示:

[root@haodaolinux02 ~]# sar --help用法: sar [ 选项 ] [ <时间间隔> [ <次数> ] ]Options are:[ -A ] [ -B ] [ -b ] [ -C ] [ -d ] [ -F [ MOUNT ] ] [ -H ] [ -h ] [ -p ] [ -q ] [ -R ][ -r ] [ -S ] [ -t ] [ -u [ ALL ] ] [ -V ] [ -v ] [ -W ] [ -w ] [ -y ][ -I { <int> [,...] | SUM | ALL | XALL } ] [ -P { <cpu> [,...] | ALL } ][ -m { <keyword> [,...] | ALL } ] [ -n { <keyword> [,...] | ALL } ][ -j { ID | LABEL | PATH | UUID | ... } ][ -f [ <filename> ] | -o [ <filename> ] | -[0-9]+ ][ -i <interval> ] [ -s [ <hh:mm:ss> ] ] [ -e [ <hh:mm:ss> ] ][root@haodaolinux02 ~]#

其命令用法具体如下所示:

sar[options][-A][-o file][[t][n]]

1、其中各个选项参数如下所示:

options: 表示选项参数;

-A: 表示显示所有的报告信息,包括CPU、内存、磁盘I/O等各方面的统计数据;

-o file: 表示是文件路径及文件名,将命令结果以二进制格式存放在指定文件中;

t: 表示时间间隔;

n: 表示是次数;

2、常见的options选项参数有:

-b: 表示I/O传输速率信息状态,包括缓冲区的读写操作、传输速度等;

-B: 表示显示换页状态,即内存页面的交换活动情况;

-c: 表示进程创建活动,包括创建和销毁的进程数量;

-d: 表示显示每个块设备的状态,包括磁盘的读写速度、传输量等;

-e: 表示设置显示报告的结束时间,可以与开始时间结合使用,以查看特定时间范围内的系统活动;

-m: 表示电源管理信息状况;

-f: 表示从指定文件提取报告,用于分析之前保存的sar数据文件;

-P: 表示报告每个CPU的状态,包括CPU的使用率、上下文切换次数等;

-q: 表示队列长度和平均负载;

-r: 表示显示系统内存在采样时间内的使用情况,包括内存总量、已用内存、空闲内存等;

-R: 表示输出内存页面的统计信息;

-S: 表示交换空间利用率;

-u [ ALL ]: 表示输出CPU使用情况的统计信息,包括用户态、系统态、空闲态等各个状态的百分比;

-v: 表示显示索引节点、文件和其他内核表的状态,包括inode的数量、使用情况等;

-w: 表示任务创建与系统转换统计信息;

-W: 表示输出系统交换活动信息;

-y: 表示TTY设备状态;

-x: 表示显示给定进程的状态,可以指定进程ID来查看特定进程的性能数据;

-i: 表示设置状态信息刷新的间隔时间,与-o参数结合使用,可以定期将报告数据保存到文件中;

-I {<int> | SUM | ALL | XALL} : 表示中断信息状况;

-n { <keyword> [,…] | ALL }: 表示网络统计信息, keyword关键词可以是如下这些:

DEV:表示网卡

EDEV:表示网卡(错误)

NFS:表示NFS客户端

NFSD:表示NFS服务器

SOCK:表示IPv4的Sockets(套接字);

IP:表示IPv4流;

EIP:表示表示IPv4流(错误);

ICMP:表示IPv4的ICMP流;

EICMP:表示IPv4的ICMP流(错误);

UDP:表示IPv4的UDP流;

SOCK6:表示IPv6的Sockets(套接字);

IP6:表示IPv6流;

EIP6:表示IPv6流(错误);

ICMP6:表示IPv6的ICMP流;

EICMP6:表示IPv6的ICMP流(错误);

UDP6:表示IPv6的UDP流;

四、sar命令常见实例分析

(一)CPU资源监控分析

1、分析CPU资源使用情况

(1)可以通过-P参数进行,对所有CPU个数进行采样,每1秒采样一次,连续采样3次。

sar -P ALL 1 3

输出结果如下图所示:

1)各个监控项参数说明如下:

CPU: all 表示统计信息为所有 CPU 的平均值。

%user: 显示在用户级别(application)运行使用 CPU 总时间的百分比。

%nice: 显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。

%system: 在核心级别(kernel)运行所使用 CPU 总时间的百分比。

%iowait: 显示用于等待I/O操作占用 CPU 总时间的百分比。

%steal: 虚拟机管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。

%idle: 显示 CPU 空闲时间占用 CPU 总时间的百分比。

2)监控指标评判参考方向:

若 %iowait 的值过高,表示硬盘存在I/O瓶颈,即磁盘I/O无法满足业务需求了;

若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量;

若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU 。

(2)当CPU是多核时,可以使用「-P」查看指定CPU使用情况,下标从0开始。当输入ALL表示输出所有的cpu状态。具体如下操作如下图所:

(3)可以结合-u参数查看CPU资源使用情况。 对所有CPU个数进行采样,每1秒采样一次,连续采样3次。

sar -u 13

或如下命令

sar -u ALL 1 3

上述命令执行结果如下所示:

(4) 可以结合-p参数查看CPU资源使用情况。 对所有CPU个数进行采样,每1秒采样一次,连续采样3次。

sar -p 13

上述命令执行结果如下图所示;

(5) 可以结合-o参数把上面命令的输出报告信息保存到一个二进制文件里,如下命令所示:

sar -o /tmp/haodao.txt -u 13

上述命令表示将 sar -u 1 3 输出结果保存到 /tmp/haodao.txt 文件中,此时是以二进制形式存放的;

(6)可以结合-f参数查看保存的 二进制结果文件 /tmp/haodao.txt ,如下命令所示:

sar -u -f /tmp/haodao.txt

(7)可以通过 sadf 命令将二进制文件 /tmp/haodao.txt 转换成数据库可读的格式如csv的格式文件 /tmp/haodao.csv ,方便出图标统计。如下命令所示:

sadf -d /tmp/haodao.txt

可以借助sed命令将上述文件中带的 ; 统一转化成 , 格式,方便统计。如下命令所示:

sadf -d /tmp/haodao.txt |sed 's/;/,/g' > /tmp/haodao.csv

(二)内存资源监控分析

1、分析内存资源使用情况

(1)可以结合-r参数 查看内存使用情况,每1秒钟采样一次,连续采样5次。

sar -r 15

上述命令执行结果如下图所示:

1)各个监控项参数说明如下:

kbmemfree: 显示空闲的物理内存大小;

kbmemused: 显示使用中的物理内存大小;

%memused: 显示物理内存使用率;

kbbuffers: 显示内核中作为缓冲区使用的物理内存大小,kbbuffers和kbcached这两个值就是free命令中的buffer和cache;

kbcached: 显示缓存的文件大小;

kbcommit: 显示保证当前系统正常运行所需要的最小内存,即为了确保内存不溢出而需要的最少内存(物理内存+Swap分区);

%commit: 显示这个值是kbcommit与内存总量(物理内存+swap分区)的一个百分比的值;

kbactive: 显示活动内存量(以KB为单位)(最近使用过且通常不会被回收,除非绝对必要);

kbinact: 显示以KB为单位的非活动内存量(较早以前使用过。它更适合被回收以用于其他目的);

kbdirty: 显示等待写回磁盘的内存量(KB);

(三)磁盘资源监控分析

1、分析磁盘资源使用情况

(1)可以结合-d参数 查看磁盘使用情况,每1秒钟采样一次,连续采样5次。

sar -d 15

上述命令执行结果如下图所示:

1)各个监控项参数说明如下:

DEV: 表示磁盘设备的名称,如果不加-p,会显示dev253-0类似的设备名称,因此加上-p显示的名称更直接;

tps: 表示每秒I/O的传输总数;

rd_sec/s: 表示每秒读取的扇区的总数;

wr_sec/s: 表示每秒写入的扇区的 总数;

avgrq-sz: 表示平均每次次磁盘I/O操作的数据大小(扇区);

avgqu-sz: 表示磁盘请求队列的平均长度;

await: 表示从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒等于1000毫秒),等于寻道时间+队列时间+服务时间;

svctm: 表示I/O的服务处理时间,即不包括请求队列中的时间;

%util: 表示I/O请求占用的CPU百分比,值越高,说明I/O越慢;

(2) 可以结合-d及-p参数 查看磁盘使用情况,每1秒钟采样一次,连续采样5次。

sar -d -p 15

上述命令执行结果如下图所示:

(四)磁盘I/O监控分析

1、分析磁盘I/O使用情况

(1)可以结合-b参数 查看I/O和传递速率的统计信息 ,每1秒钟采样一次,连续采样5次。

sar -b 15

上述命令执行结果如下图所示:

1)各个监控项参数说明如下:

ps : 表示磁盘每秒钟的IO总数,等于iostat中的tps;

rtps : 表示每秒钟从磁盘读取的IO总数;

wtps : 表示每秒钟从写入到磁盘的IO总数;

bread/s: 表示 每秒钟从磁盘读取的块总数;

bwrtn/s : 表示每秒钟此写入到磁盘的块总数;

(五)swap分区监控分析

1、分析swap分区使用情况

(1)可以结合-W参数 查看swap分区的统计信息 ,每1秒钟采样一次,连续采样5次。

sar -W 15

上述命令执行结果如下图所示:

1)各个监控项参数说明如下:

pswpin/s : 表示每秒从交换分区到系统的交换页面(swap page)数量;

pswpout/s : 表示每秒从系统交换到swap的交换页面(swap page)的数量;

(六)平均负载监控分析

1、查看平均负载使用情况

(1)可以结合-q参数 查看进程队列长度和平均负载状态统计信息 ,每1秒钟采样一次,连续采样5次。

sar -q 15

上述命令执行结果如下图所示:

1)各个监控项参数说明如下:

runq-sz: 表示运行队列的长度(等待运行的进程数,每核的CP不能超过3个);

plist-sz : 表示进程列表中的进程(processes)和线程数(threads)的数量;

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

ldavg-5 : 表示最后5分钟的CPU平均负载;

ldavg-15 : 表示最后15分钟的CPU平均负载;

(七)进程及文件状态监控分析

1、查看进程及文件状态信息

(1)可以结合-v参数查看 进程、inode、文件和锁表状态信息 ,每1秒钟采样一次,连续采样5次。

sar -v 15

上述命令执行结果如下所示:

1)各个监控项参数说明如下:

dentunusd: 表示在缓冲目录条目中没有使用的条目数量;

file-nr: 表示被系统使用的文件句柄数量;

inode-nr : 表示已经使用的索引数量;

pty-nr: 表示使用的pty数量;

(八)内存分页统计状态监控分析

1、查看内存分页统计状态信息

(1)可以结合-B参数查看 内存页面的交换活动 状态信息 ,每1秒钟采样一次,连续采样5次。

sar -B 15

上述命令执行结果如下图所示:

1)各个监控项参数说明如下:

pgpgpgin/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)的百分比;

(九)任务创建和系统切换活动监控分析

1、查看 任务创建和系统切换活动 状态信息

(1)可以结合-w参数 查看 任务创建和系统切换活动 状态信息 ,每1秒钟采样一次,连续采样5次。

sar -w 15

上述命令执行结果如下图所示:

1)各个监控项参数说明如下:

proc/s:表示每秒创建的任务总数;

cswch/s:表示每秒上下文切换的总数;

(十)网络统计状态监控分析

1、查看网络统计状态信息

(1)可以结合-n参数跟DEV 查看 网络相关的统计 信息 ,每1秒钟采样一次,连续采样5次。

sar -n DEV 15

上述命令执行结果如下图所示:

1)各个监控项参数说明如下:

IFACE: 表示本地网卡接口的名称;

rxpck/s: 表示每秒钟接收的数据包;

txpck/s: 表示每秒钟发送的数据库;

rxKB/S: 表示每秒钟接收的数据包大小,单位为KB;

txKB/S: 表示每秒钟发送的数据包大小,单位为KB;

rxcmp/s: 表示每秒钟接收的压缩数据包;

txcmp/s: 表示每秒钟发送的压缩包;

rxmcst/s: 表示每秒钟接收的多播数据包;

(2)可以结合-n参数跟 EDEV显示关于网络错误的统计数据 信息 ,每1秒钟采样一次,连续采样5次。

sar -n EDEV 15

上述命令执行结果如下图所示:

1)各个监控项参数说明如下:

IFACE: 表示网卡名称;

rxerr/s: 表示每秒钟接收到的损坏的数据包;

txerr/s : 表示每秒钟发送的数据包错误数;

coll/s: 表示当发送数据包时候,每秒钟发生的冲撞(collisions)数,这个是在半双工模式下才有;

rxdrop/s : 表示当由于缓冲区满的时候,网卡设备接收端每秒钟丢掉的网络包的数目;

txdrop/s : 表示当由于缓冲区满的时候,网络设备发送端每秒钟丢掉的网络包的数目;

txcarr/s : 表示当发送数据包的时候,每秒钟载波错误发生的次数;

rxfram : 表示在接收数据包的时候,每秒钟发生的帧对其错误的次数;

rxfifo : 表示在接收数据包的时候,每秒钟缓冲区溢出的错误发生的次数;

txfifo : 表示在发生数据包 的时候,每秒钟缓冲区溢出的错误发生的次数;

(3)可以结合-n参数跟 SOCK显示 统计socket连接信息 ,每1秒钟采样一次,连续采样5次。

sar -n SOCK 15

上述命令执行结果如下图所示:

1)各个监控项参数说明如下:

totsck: 表示当前被使用的socket总数;

tcpsck: 表示当前正在被使用的TCP的socket总数;

udpsck: 表示当前正在被使用的UDP的socket总数;

rawsck: 表示当前正在被使用于RAW的skcket总数;

if-frag: 表示当前的IP分片的数目;

tcp-tw: 表示TCP套接字中处于TIME-WAIT状态的连接数量;

(4)可以结合-n参数跟TCP 显示 TCP连接的统计 信息 ,每1秒钟采样一次,连续采样5次。

sar -n TCP 15

上述命令执行结果如下图所示:

1)各个监控项参数说明如下:

active/s : 表示新的主动连接;

passive/s: 表示新的被动连接;

iseg/s : 表示接受的段;

oseg/s : 表示输出的段;

五、总结

工欲善其事,必先利其器,实用的命令可以让你在实际工作中如虎添翼。sar这个命令选项参数众多。以上只是列举一些常用的参数并进行常用的性能场景进行分析举例。大家如果想深入使用这个命令,可以自行去使用一番,相信你在熟悉该命令后,在Linux系统性能分析方面会收获更多!

更多精彩

关注公众号 浩道Linux

浩道Linux ,专注于 Linux系统 的相关知识、 网络通信 网络安全 Python相关 知识以及涵盖IT行业相关技能的学习, 理论与实战结合,真正让你在学习工作中真正去用到所学。同时也会分享一些面试经验,助你找到高薪offer,让我们一起去学习,一起去进步,一起去涨薪!期待您的加入~~~ 关注回复「资料」可 免费获取学习资料 (含有电子书籍、视频等)。

喜欢的话,记得 点「赞」 「在看」