sar命令
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sar命令相关的知识,希望对你有一定的参考价值。
1.sar命令
sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。本文主要以CentOS 6.3 x64系统为例,介绍sar命令。
2.sar命令的用法
sar [选项] :读取sar文件中的历史记录
sar [选项] [采集间隔] [采集次数]:读取当前的状态
sar [选项] [-o file] [ -f file]:-o把加过以二进制的形式写入文件,-f读取文件。
选项:
-A:所有报告的总和
-b:显示I/O和传递速率的统计信息
-B:显示换页状态
-d:输出每一块磁盘的使用信息
-e:设置显示报告的结束时间
-f:从指定的文件读取报告
-i:设置状态信息刷新的间隔时间
-n:统计网络信息。sar -n选项使用6个不同的开关:DEV,EDEV,NFS,NFSD,SOCK,IP,EIP,ICMP,EICMP,TCP,ETCP,UDP,SOCK6,IP6,EIP6,ICMP6,EICMP6和UDP6 ,DEV显示网络接口信息,EDEV显示关于网络错误的统计数据,NFS统计活动的NFS客户端的信息,NFSD统计NFS服务器的信息,SOCK显示套接字信息,ALL显示所有5个开关。它们可以单独或者一起使用。
-o:把结果以二进制的形式输入到指定文件中。
-P:报告每个CPU的状态
-R:显示内存状态
–u:输出cpu使用情况和统计信息
–v:显示索引节点、文件和其他内核表的状态
-w:显示交换分区的状态
-x:显示给定进程的装
-r:报告内存利用率的统计信息
3.实例
3.1 sar查看网卡流量 -n DEV
16时14分34秒:当前时间
IFACE:网卡
rxpck/s:接受的数据包的数量,几千数据属于正常范围,几万就要注意了。进来的流量大,说明可能被攻击了。
txpck/s:发送的数据包的数量
rxkB/s:接受的数据量
txkB/s:发送的数据量
3.2 查看磁盘 -d
DEV:设备名
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越慢
3.3 历史文件操作 -o -f
# sar -d 1 1 -o /var/log/sa/sa04
# sar -f /var/log/sa/sa04
16时00分01秒 all 0.08 0.00 0.06 0.12 0.00 99.74
16时10分01秒 all 0.08 0.00 0.06 0.13 0.00 99.72
16时20分01秒 all 0.08 0.00 0.06 0.20 0.00 99.67
16时21分26秒 all 0.07 0.00 0.04 0.22 0.00 99.66
16时21分27秒 all 0.00 0.00 0.00 3.02 0.00 96.98
平均时间: all 0.10 0.00 0.05 0.15 0.00 99.69
sar命令每逢10就会自动以二进制的形式记录当前系统的状态到/var/log/sa/saxx文件里(xx为当天的日期)。saxx是二进制文件,第二天会生成一个sarxx的普通文件可以直接查看。
3.4 其他的查询以及使用方法
其他的方法不常用,也要记录一下。
1.2:sar -u #统计CPU的使用情况,每间隔1秒钟统计一次总共统计三次:#sar -u 1 3
#%user #用户空间的CPU使用
#%nice 改变过优先级的进程的CPU使用率
#%system 内核空间的CPU使用率
#%iowait CPU等待IO的百分比
#%steal 虚拟机的虚拟机CPU使用的CPU
#%idle 空闲的CPU
#在以上的显示当中,主要看%iowait和%idle,%iowait过高表示存在I/O瓶颈,即磁盘IO无法满足业务需求,如果%idle过低表示CPU使用率比较严重,需要结合内存使用等情况判断CPU是否瓶颈。
1.2.1:sar -p 1 3 #报个每个CPU的使用状态:
#CPU 所有CPU的统计
#%user 用户态的CPU使用统计
#%nice 更改过优先级的进程的CPU使用统计
#%iowait CPU等待IO数据的百分比
#%steal 虚拟机的vCPU占用的物理CPU的百分比
#%idle 空闲的CPU百分比
1.3:将统计结果保存在文件并从文件读取内容:
#sar -u -o /tmp/1.txt 2 3 #保存之文件,保存后的文件是二进制的,无法使用vim和cat直接打开
# sar -u -f /tmp/1.txt #从二进制文件读取
1.4:sar -q #查看平均负载:
#runq-sz 运行队列的长度(等待运行的进程数,每核的CP不能超过3个)
#plist-sz 进程列表中的进程(processes)和线程数(threads)的数量
#ldavg-1 最后1分钟的CPU平均负载,即将多核CPU过去一分钟的负载相加再除以核心数得出的平均值,5分钟和15分钟以此类推
#ldavg-5 最后5分钟的CPU平均负载
#ldavg-15 最后15分钟的CPU平均负载
1.5:sar -r #查看内存使用情况
#kbmemfree 空闲的物理内存大小
#kbmemused 使用中的物理内存大小
#%memused 物理内存使用率
#kbbuffers 内核中作为缓冲区使用的物理内存大小,kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.
#kbcached 缓存的文件大小
#kbcommit 保证当前系统正常运行所需要的最小内存,即为了确保内存不溢出而需要的最少内存(物理内存+Swap分区)
#commit 这个值是kbcommit与内存总量(物理内存+swap分区)的一个百分比的值
1.6:sar -W #查看系统swap分区的统计信息
#pswpin/s 每秒从交换分区到系统的交换页面(swap page)数量
#pswpott/s 每秒从系统交换到swap的交换页面(swap page)的数量
1.7:sar -b #查看I/O和传递速率的统计信息
#tps 磁盘每秒钟的IO总数,等于iostat中的tps
#rtps 每秒钟从磁盘读取的IO总数
#wtps 每秒钟从写入到磁盘的IO总数
#bread/s 每秒钟从磁盘读取的块总数
#bwrtn/s 每秒钟此写入到磁盘的块总数
1.8:sar -d #磁盘使用详情统计
#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越慢
1.9:sar -v #进程、inode、文件和锁表状态
#dentunusd 在缓冲目录条目中没有使用的条目数量
#file-nr 被系统使用的文件句柄数量
#inode-nr 已经使用的索引数量
#pty-nr 使用的pty数量
####这里面的索引和文件句柄值不是ulimit -a查看到的值,而是sysctl.conf里面定义的和内核相关的值, max-file表示系统级别的能够打开的文件句柄的数量, 而ulimit -n控制进程级别能够打开的文件句柄的数量,可以使用sysctl -a | grep inode和sysctl -a | grep file查看,具体含义如下:
file-max中指定了系统范围内所有进程可打开的文件句柄的数量限制(系统级别, kernel-level)。 (The value in file-max denotes the maximum number of file handles that the Linux kernel will allocate)。当收到"Too many open files in system"这样的错误消息时, 就应该曾加这个值了。 # cat /proc/sys/fs/file-max 4096 # echo 100000 > /proc/sys/fs/file-max 或者 # echo ""fs.file-max=65535" >> /etc/sysctl.conf # sysctl -p file-nr 可以查看系统中当前打开的文件句柄的数量。 他里面包括3个数字: 第一个表示已经分配了的文件描述符数量, 第二个表示空闲的文件句柄数量, 第三个表示能够打开文件句柄的最大值(跟file-max一致)。 内核会动态的分配文件句柄, 但是不会再次释放他们(这个可能不适应最新的内核了, 在我的file-nr中看到第二列一直为0, 第一列有增有减) man bash, 找到说明ulimit的那一节:提供对shell及其启动的进程的可用资源(包括文件句柄, 进程数量, core文件大小等)的控制。 这是进程级别的, 也就是说系统中某个session及其启动的每个进程能打开多少个文件描述符, 能fork出多少个子进程等... 当达到上限时, 会报错"Too many open files"或者遇上Socket/File: Can’t open so many files等
1.10:sar -n #统计网络信息
#sar -n选项使用6个不同的开关:DEV,EDEV,NFS,NFSD,SOCK,IP,EIP,ICMP,EICMP,TCP,ETCP,UDP,SOCK6,IP6,EIP6,ICMP6,EICMP6和UDP6 ,DEV显示网络接口信息,EDEV显示关于网络错误的统计数据,NFS统计活动的NFS客户端的信息,NFSD统计NFS服务器的信息,SOCK显示套接字信息,ALL显示所有5个开关。它们可以单独或者一起使用。
1.10.1:sar -n DEV 1 1: 每间隔1秒统计一次,总计统计1次,下面的average是在多次统计后的平均值
#IFACE 本地网卡接口的名称
#rxpck/s 每秒钟接受的数据包
#txpck/s 每秒钟发送的数据库
#rxKB/S 每秒钟接受的数据包大小,单位为KB
#txKB/S 每秒钟发送的数据包大小,单位为KB
#rxcmp/s 每秒钟接受的压缩数据包
#txcmp/s 每秒钟发送的压缩包
#rxmcst/s 每秒钟接收的多播数据包
1.10.2:sar -n EDEV 1 1 #统计网络设备通信失败信息:
#IFACE 网卡名称
#rxerr/s 每秒钟接收到的损坏的数据包
#txerr/s 每秒钟发送的数据包错误数
#coll/s 当发送数据包时候,每秒钟发生的冲撞(collisions)数,这个是在半双工模式下才有
#rxdrop/s 当由于缓冲区满的时候,网卡设备接收端每秒钟丢掉的网络包的数目
#txdrop/s 当由于缓冲区满的时候,网络设备发送端每秒钟丢掉的网络包的数目
#txcarr/s 当发送数据包的时候,每秒钟载波错误发生的次数
#rxfram 在接收数据包的时候,每秒钟发生的帧对其错误的次数
#rxfifo 在接收数据包的时候,每秒钟缓冲区溢出的错误发生的次数
#txfifo 在发生数据包 的时候,每秒钟缓冲区溢出的错误发生的次数
1.10.3:sar -n SOCK 1 1 #统计socket连接信息
#totsck 当前被使用的socket总数
#tcpsck 当前正在被使用的TCP的socket总数
#udpsck 当前正在被使用的UDP的socket总数
#rawsck 当前正在被使用于RAW的skcket总数
#if-frag 当前的IP分片的数目
#tcp-tw TCP套接字中处于TIME-WAIT状态的连接数量
########如果你使用FULL关键字,相当于上述DEV、EDEV和SOCK三者的综合
1.10.4:sar -n TCP 1 3 #TCP连接的统计
#active/s 新的主动连接
#passive/s 新的被动连接
#iseg/s 接受的段
#oseg/s 输出的段
1.10.5:sar -n 使用总结
-n DEV : 网络接口统计信息。 -n EDEV : 网络接口错误。 -n IP : IP数据报统计信息。 -n EIP : IP错误统计信息。 -n TCP : TCP统计信息。 -n ETCP : TCP错误统计信息。 -n SOCK : 套接字使用。
参考:https://www.cnblogs.com/howhy/p/6396437.html
以上是关于sar命令的主要内容,如果未能解决你的问题,请参考以下文章