sar命令详解

news2024/11/27 10:41:58

sar是强大的linux系统活动状况收集、报告命令。可以收集CPU,内存,磁盘I/O,网络等诸多数据。对于性能分析是个可靠的利器。

安装

sar命令是sysstat下的一个工具,所以安装sar需要首先安装sysstat命令,可以考虑yum安装或者使用源码包编译安装等。yum 安装十分便捷,不需要任何复杂的调试就可以使用:

#ubuntu

sudo apt-get install -y sysstat

#centos 

sudo yum install -y sysstat

安装gcc等重要环境

#ubuntu

sudo apt-get install -y gcc gcc-c++

#centos

sudo yum install -y gcc gcc-c++ 

最后查看任一命令的版本即可得到sysstat版本

mpstat -V

sysstat 版本 9.0.4
(C) Sebastien Godard (sysstat <at> orange.fr)

初次使用sar命令会遇到如下报错:Cannot open /var/log/sa/sa29: No such file or directoryPlease check if data collecting is enabled

这是因为sar找不到记录数据的源文件,这时只需要使用-o参数生成即可sar -o 2 3

常用方法

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

sar [command] 2 5

sar -A 2 5

用法: sar [ 选项 ] [ <时间间隔> [ <次数> ] ]
选项:
[ -A ] [ -b ] [ -B ] [ -C ] [ -d ] [ -h ] [ -m ] [ -p ] [ -q ] [ -r ] [ -R ]
[ -S ] [ -t ] [ -u [ ALL ] ] [ -v ] [ -V ] [ -w ] [ -W ] [ -y ]
[ -I { <中断> [,...] | SUM | ALL | XALL } ] [ -P { <cpu> [,...] | ALL } ]
[ -n { <关键词> [,...] | ALL } ]
[ -o [ <文件名> ] | -f [ <文件名> ] ]
[ -i <时间间隔> ] [ -s [ <时:分:秒> ] ] [ -e [ <时:分:秒> ] ]

 

每秒采样一次网络情况直到15:41并把采样数据输出到./123

sar -n DEV 1 -e 15:41:00 >.//123 &

本月27日23点至0点的内存数据,需要通过crontab设置定时任务

sar -f /var/log/sa/sa27 -s 23:00:00 -e 00:00:00 -r

CPU篇

监控CPU状态:-p或-P {CPU_LIST | ALL}

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

  • sar -P 0 1 3

  

表示每秒采集0号CPU状态,总共采样3次。前两列不必多言,

  • %user:指运行非特权用户进程时间百分率
  • %nice:是指运行特权用户进程时间百分率
  • %system:是指运行内核进程时间,这个时间包括了CPU处理软硬中断的时间
  • %iowait:是指等待I/O完成的时间
  • %steal:是指运行虚拟机的时间百分率,steal意味着被偷走的时间
  • %idle:是指cpu空闲时间百分率
报告CPU使用情况:-u [ALL]

报告cpu使用情况,与-p不同的是,-u只能报告所有cpu。

  • sar -u ALL 1 3
  • %usr:和-P的%user的区别在于不包括虚拟机运行的时间
  • %nice:是指运行特权用户进程时间百分率
  • %sys:和-P的%system的区别在于不包括各种软硬中断时间
  • %iowait:是指等待I/O完成的时间
  • %steal:是指运行虚拟机的时间百分率,steal意味着被偷走的时间
  • %irq:是指处理硬中断的cpu时间百分率
  • %soft:是指处理软中断的cpu时间百分率
  • %guest:指运行普通虚拟程序的时间百分率
  • %gnice:指运行特权虚拟程序的时间百分率
  • %idle:是指cpu空闲时间百分率,我的机器上并未运行任何程序,所以此列一直为100%
进程队列长度和平均负载状态监控:-q

用于报告队列长度以及平均负载

  • sar -q 1 3
  • runq-sz:运行队列的长度(等待运行的进程数)
  • plist-sz:进程列表中进程(processes)和线程(threads)的数量
  • ldavg-1:最后1分钟内cpu的负载(System load average)
  • ldavg-5:过去5分钟内cpu的负载
  • ldavg-15:过去15分钟内cpu的负载
  • blocked:表示等待I/O完成而被阻塞的任务总数,不为0则需要留意I/O是否存在性能瓶颈
上下文切换监控:-w

报告进程上下文切换的次数

  • sar -w 1 3
  • proc/s:指每秒创建的进程数
  • cswch/s:指每秒自愿上下文切换的次数,是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换。

还有一个非自愿的上下文切换次数nvcswch/s表示则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。非自愿次数明显升高意味着cpu产生了性能瓶颈。非自愿上下文切换可以使用pidstat加上-w选项来输出

内存篇

内存使用情况监控:-r [-h]

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

  • sar -r -h 1 3
  • kbmemfree:剩余内存总量,这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.
  • kbavail:可用内存总量,可用内存≈剩余内存+buffer+cache
  • kbmemused:使用的内存总量,使用量=总内存-剩余内存-buffer-cache-slab,这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.
  • %memused:这个值是kbmemused和内存总量(不包括swap)的一个百分比.
  • kbbuffers:被内核用来作为buffer的内存量,即free命令的buffer
  • kbcached:被内核用来作为cache的内存量,即free命令的cache
  • kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).
  • %commit:这个值是kbcommit与内存总量(包括swap)的一个百分比.
  • kbactive:当前活跃内存量。除非万不得已,这部分内存才会被回收
  • kbinact:当前非活跃内存总量,当内存不足时,这部分内存最容易被内核收回
  • kbdirty:脏页大小,脏页指的是暂存于内存还没来得及持久化到硬盘的数据。可以使用sync刷入硬盘
内存分页监控:-B

报告系统中分页统计信息

  • sar -B 1 3
  • pgpgin/s:表示每秒从磁盘或SWAP置换到内存的字节数(KB)
  • pgpgout/s:表示每秒从内存置换到磁盘或SWAP的字节数(KB)
  • fault/s:每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor) ,这不是产生I/O的缺页中断的次数,因为部分缺页中断不需要I/O就能处理
  • majflt/s:每秒钟产生的主缺页数.
  • pgfree/s:每秒被放入空闲队列中的页个数
  • pgscank/s:每秒被内核线程[kswapd]扫描的页个数
  • pgscand/s:每秒直接被扫描的页个数
  • pgsteal/s:系统为满足其内存需求声明每秒从cache(分页缓存和swap缓存)回收的页的数量
  • %vmeff:每秒清除的页(pgsteal)占总扫描页(pgscank+pgscand)的百分比
swap使用情况监控:-S [h]

输出swap空间的使用率统计信息

  • sar -S 1 3
  • kbswpfree:未使用的swap量
  • kbswpused:使用中的swap内存量
  • %swpused:使用中的swap内存量占总swap的百分率
  • kbswpcad:被swap缓存的内存量,这部分内存曾经被换出,现在又被换入但仍然位于swap空间
  • %swpcad:kbswpcad占kbswpused的百分率
系统交换活动信息监控:-W

统计输出swap换入换出信息

  • sar -W 1 2

页面发生交换时,服务器的吞吐量会大幅下降;服务器状况不良时,如果怀疑因为内存不足而导致了页面交换的发生,可以使用这个命令来确认是否发生了大量的交换;

  • pswpin/s:每秒系统换入的交换页面(swap page)数量
  • pswpout/s:每秒系统换出的交换页面(swap page)数量

I/0篇

I/O和传送速率监控:-b

报告I/O及传输速率统计信息

  • sar -b 1 3
  • tps:每秒钟物理设备的 I/O 传输总量。一次传输就是加到物理设备的一次I/O请求,由于多次逻辑请求可以合并为单次的I/O请求,所以一次传输的大小是不确定的
  • rtps:每秒钟从物理设备读入的数据总量
  • wtps:每秒钟向物理设备写入的数据总量
  • dtps:每秒丢弃的请求总数
  • bread/s:每秒钟从物理设备读入的数据量,单位为 块/s,块的大小等同于一个扇区的大小,512字节
  • bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s
  • bdscd/s:以块为单位丢弃的数据总量
设备使用情况监控:-d -h[--dev=dev_list]

报告块设备的活动情况

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

  • sar -d 1 1

tps:和-b的tps含义一样,都表示每秒钟加到物理设备上的传输总量

  • tps:每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的.
  • rkB/s:每秒从设备读到的字节数
  • wkB/s:每秒写入设备的字节数
  • areq-sz:加到设备上I/O请求平均大小(以字节为大小)
  • aqu-sz:加到设备上请求长度的平均值.
  • await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒=1000毫秒).
  • %util:I/O请求占CPU的百分比,比率越大,说明越饱和. 对于串行设备,接近100%意味着设备出现了性能瓶颈,但是对于并行设备比如RAID或者SSD,这个值实际上并不能反映出设备的极限
  1. avgqu-sz 的值较低时,设备的利用率较高。
  2. 当%uti的值接近 1% 时,表示设备带宽已经占满。
inode、文件和其他内核表监控:-v

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

  • sar -v 1 1
  • dentunusd:目录缓存中未使用的缓存项数。
  • file-nr:系统使用的文件句柄数,查看目前使用的文件句柄数lsof|awk '{print $2}'|wc -l
  • inode-nr:索引节点句柄(inode handle)的使用数量
  • pty-nr:打开的伪终端数,即几个人登陆了系统

网络篇

网络监控:-n DEV [--iface=face_list]
  • sar -n DEV 1 1
  • IFACE:网络接口
  • rxpck/s:每秒接收的报文数
  • txpck/s:每秒发送的报文数
  • rxkB/s:每秒接收的字节数,``rxkB/s*1024/rxpck/s`<60B,意味着收到的是小包
  • txkB/s:每秒发送的字节数
  • rxcmp/s:每秒接收的压缩数据包数
  • txcmp/s:每秒发送的压缩数据包数
  • rxmcst/s:每秒接收的多播数据包数
  • %ifutil:网络接口的利用率百分比,对于半双工接口,利用率使用rxkB/s和txkB/s之和作为接口速度的百分比计算。对于全双工,这是rxkB/s或txkB/s中的较大值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1286974.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UE Windows平台下Linux的交叉编译项目打包

UE Windows平台下Linux的交叉编译项目打包 交叉编译&#xff08;Cross-compilation&#xff09; 使得在以Windows为中心的工作流程中工作的游戏开发者能够以Linux为目标对项目进行打包。目前&#xff0c;只有Windows支持交叉编译。 交叉编译支持的平台 Windows | Linux-x86_…

有趣的代码——有故事背景的程序设计3

这篇文章再和大家分享一些有“背景”的程序设计&#xff0c;希望能够让大家学到知识的同时&#xff0c;对编程学习更感兴趣&#xff0c;更能在这条路上坚定地走下去。 目录 1.幻方问题 2.用函数打印九九乘法表 3.鸡兔同笼问题 4.字数统计 5.简单选择排序 1.幻方问题 幻方又…

【LeetCode】每日一题 2023_12_2 拼车(模拟/差分)

文章目录 刷题前唠嗑题目&#xff1a;拼车题目描述代码与解题思路学习大佬题解 刷题前唠嗑 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01; 题目&#xff1a;拼车 题目链接&#xff1a;1094. 拼车 题目描述 代码与解题思路 func carPooling(trips [][]int…

智能优化算法应用:基于金鹰算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于金鹰算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于金鹰算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.金鹰算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

7个简单技巧,让你从容应对压力面试!

01-什么是压力面试&#xff1f; 压力面试是指有意制造紧张&#xff0c;以了解求职者将如何面对工作压力的一种面试形式。 事实上&#xff0c;压力面试不是单独存在的一类面试&#xff0c;往往是穿插在面试过程中。 面试人通过提出不礼貌、冒犯的问题&#xff0c;或者用怀疑、…

深入学习Synchronized各种使用方法

文章目录 前言一、synchronized关键字通用在下面四个地方&#xff1a;1.1synchronized修饰实例方法1.2synchronized修饰静态方法&#xff1a;1.3synchronized修饰实例方法的代码块1.4synchronized修饰静态方法的代码块2.读入数据 二.Sychronized关键特性2.1互斥2.2 刷新内存2.3…

Clion自定义管理和配置软件构建过程的工具(代替CMake)构建程序

在公司由于需要x86环境和其他arm环境&#xff0c;同时需要使用公司自定义的mine_x86或者mine_orin对代码进行编译。 编译命令如下mine_x86 build -Dlocal1 -j8,为使用Clion对程序进行调试&#xff0c;需要对程序进行设置。方便调试代码时能够断点查看变量。尝试了很多次&#…

python高级练习题库实验1(B)部分

文章目录 题目1代码实验结果题目2代码实验结果题目3代码实验结果题目4代码实验结果题目5代码实验结果题目总结题目1 打包糖果小游戏,用户输入糖果品牌与个数,还有一个盒子里面可以装多少个糖果,输出一些打印信息,如下图所示: 代码 print("Packaging lollies into…

基于springboot + vue大学生竞赛管理系统

qq&#xff08;2829419543&#xff09;获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;springboot 前端&#xff1a;采用vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xf…

详解十大经典排序算法(五):归并排序(Merge Sort)

算法原理 归并排序的核心思想是将一个大的数组分割成多个小的子数组&#xff0c;然后分别对这些子数组进行排序&#xff0c;最后将排序后的子数组合并起来&#xff0c;得到一个有序的大数组。 算法描述 归并排序&#xff08;Merge Sort&#xff09;是一种经典的排序算法&#x…

二百一十二、Flume——Flume实时采集Linux中的目录文件写入到HDFS中(亲测、附截图)

一、目的 在实现Flume实时采集Linux中的Hive日志写入到HDFS后&#xff0c;再做一个测试&#xff0c;用Flume实时采集Linux中的目录文件&#xff0c;即使用 Flume 监听Linux整个目录的文件&#xff0c;并上传至 HDFS中 二、前期准备 &#xff08;一&#xff09;安装好Hadoop、…

Linux使用root用户安装完MySQL软件后,配置MySQL这个普通用户登录

在 Linux 系统中&#xff0c;当您使用 root 用户安装 MySQL 后&#xff0c;系统会自动创建一个名为 mysql 的系统用户。这个 mysql 用户主要用于管理 MySQL 服务的运行&#xff0c;通常是没有登录系统的权限的。如果您希望使这个 mysql 用户能够登录到系统&#xff0c;您需要设…

JAVAEE初阶相关内容第十八弹--网络原理之TCP_IP【续集】

写在前 上一篇博客的重点内容主要讲了关于传输层的TCP协议、UDP协议。 点击跳转上一篇博客 重点介绍了协议的特点、协议端格式、需要重点理解并掌握TCP的工作机制&#xff08;十条&#xff09;。 TCP与UDP对比&#xff1f; TCP用于可靠传输的情况&#xff0c;应用于文件传输&am…

超完整的mysql安装配置方法(包含idea和navicat连接mysql,并实现建表)

mysql安装配置方法 1、下载mysql2、解压到指定的安装目录3、配置初始化文件my.ini4、配置用户变量和系统变量5、初始化mysql6、安装mysql服务并启动修改密码7、使用idea连接mysql8、使用Navicat可视化工具连接mysql&#xff0c;并实现新建数据库&#xff0c;新建表 1、下载mysq…

【数据结构与算法篇】八种排序 (C++实现)

多种排序算法的Cpp实现 一. 排序的概念及其运用排序的概念 二. 一图速览常见排序三. 排序的C实现1> 直接插入排序2> 希尔排序希尔排序代码实现(希尔所实现)希尔排序代码实现(优化版) 3> 选择排序选择排序的代码实现(同时选出最大和最小的元素) 4> 堆排序堆排序的代…

CSS面经(未完待续)

1. CSS选择器及其优先级 !important > 行内样式 > id选择器 > 类/伪类/属性选择器 > 标签/伪元素选择器 > 子/后台选择器 > *通配符 2. 重排和重绘是什么&#xff1f;浏览器的渲染机制是什么&#xff1f; 重排(回流)&#xff1a;当增加或删除dom节点&…

面试就是这么简单,offer拿到手软(三)—— 常见中间件框架面试题,es,redis,dubbo,zookeeper kafka 等

面试就是这么简单&#xff0c;offer拿到手软&#xff08;一&#xff09;—— 常见非技术问题回答思路 面试就是这么简单&#xff0c;offer拿到手软&#xff08;二&#xff09;—— 常见65道非技术面试问题 面试就是这么简单&#xff0c;offer拿到手软&#xff08;三&#xff…

DAPP开发【09】NFT交易市场开发(hardhat测试)

测试文件下新建market.js文件 扁平化&#xff0c;将所有依赖放在tmp.sol&#xff0c;可以去给他人使用 npx hardhat flatten > tmp.sol 测试文件 const {expect} require(chai); const {ethers} require(hardhat);describe(Market,async function(){//定义三个合约&a…

long转int类型转换问题

在业务代码中排序时需要根据日期排序&#xff0c;写了如下代码 sorted((o1, o2) -> {String str1 null;String str2 null;try {Field field getField(fieldMap, configBO.getCodeName());str1 String.valueOf(field.get(o1));str2 String.valueOf(field.get(o2));} ca…

kubectl获取命名空间下所有configmap集合的方法

前言&#xff1a; 获取单个configmap并忽略特定字段的操作可参照&#xff1a;kubectl获取ConfigMap导出YAML时如何忽略某些字段。 要获取命名空间下所有ConfigMap并忽略特定字段&#xff0c;你可以使用kubectl命令与例如yq这样的工具结合使用来忽略或删除不需要的字段。以下是…