性能测试-sysstat工具包(mpstat-主要查看CPU负载与iostat-看数据换入换出以及pidstat-主要看上下文切换)
1、mpstat概述
mpstat (multiprocessor state) 可以查看所有cpu的平均负载,也可以查看指定cpu的负载。所以mpstat其实就是主要查看CPU负载的一个工具。是一款常用的多核CPU性能分析工具,用来实时查询每个CPU的性能指标,以及所有CPU的平均指标。
2、mpstat安装
它是Linux性能工具集sysstat中的一个工具,所以我们要装上sysstat,安装方法随不同的系统略有不同,sysstat是一个软件包,包含监测系统性能及效率的一组工具,这些工具对于我们收集系统性能数据,比如:CPU 使用率、硬盘和网络吞吐数据,这些数据的收集和分析,有利于我们判断系统是否正常运行
yum install sysstat -y
3、语法
命令语法格式:
mpstat [-P {cpu|ALL}] [interval [count]]
- -P: 指定要监控哪个CPU,范围是[0 ~ n-1], ALL表示监控所有CPU都监控
- internal: 相邻两次采样的间隔时间
- count: 采样次数。
4、显示参数描述

显示参数 描述
- CPU 显示的是某个CPU 还是全部CPU all=全部
- %usr 表示用户所有使用的CPU百分比
- %nice 表示使用 nice 值的 CPU 的百分比。
- %sys 表示内核进程使用的 CPU 百分比。
- %iowait 表示等待进行 I/O 所使用的 CPU 时间百分比。
- %irq 表示用于处理系统中断的CPU百分比
- %soft 表示用于软件中断的CPU百分比
- %steal 虚拟机强制CPU等待的时间百分比
- %guest 虚拟机占用CPU时间的百分比
- %gnice CPU运行niced guest虚拟机所花费的时间百分比
- %idle CPU的空闲时间的百分
5、平均负载理解
平均负载不是CPU的使用率,和CPU的使用率没有直接关系。它指的是单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数。
所谓的可运行状态,就是用ps命令看到的R状态,它指的是正在使用CPU和正在等待CPU的进程。
所谓的不可中断状态,就是正处于内核状态关键流程的进程,并且这些流程是不可打断的,比如等待硬件设备I/O响应,也就是ps中看到的D状态的进程。
既然是平均活跃进程数,那么最理想的,就是每个CPU上都刚好运行着一个进程,这样每个CPU都得到了充分的利用。
比如当平均负载为2时:
- 在2个CPU的系统上,意味着每个CPU刚好被占完。
- 在4个CPU的系统上,意味着每个CPU只占50%。
- 在1个CPU的系统上,意味着有一半的进程竞争不到CPU。
6、平均负载到底多少比较合适呢?
前面我们说到,平均负载最理想等于CPU个数,所以要判断平均负载,就先得知道有几个CPU
有了这个数据,如果平均负载大于CPU个数,说明过载了。
不过,平均负载有三个值,我们改参考哪一个呢?其实我们应该根据这三个值来判断系统负载的趋势。
一般在工作中,当平均负载高于70%时,我们根据系统负载的历史数据,判断变化趋势,来排查问题。
7、平均负载和CPU使用率的关系
平均负载不仅包含正在使用CPU的进程,还包括等待CPU和等待IO的进程。而CPU的使用率,是单位时间内CPU的繁忙情况,跟平均负载不一定完全对应,比如:
- 1,计算密集型进程,会大量使用CPU导致平均负载增高,这时,平均负载和CPU使用率两者一致。
- 2,I/O密集型进程,等待I/O导致负载很高,但CPU使用率不一定高。
- 3,大量等待CPU的进程调度也会导致平均负载增高,此时CPU的使用率也会比较高
参考文章,特别好,推荐: https://blog.csdn.net/fish_study_csdn/article/details/124731584
8、pidstat常用参数-主要看上下文切换
- -u 默认的参数,显示各个进程的CPU使用统计
- -r 显示各个进程的内存使用统计
- -d 显示各个进程的IO使用情况
- -p 指定进程号
- -w 显示每个进程的上下文切换情况
- -t 显示选择任务的线程的统计信息外的额外信息
- -V 版本号
- -h 在一行上显示了所有活动,这样其他程序可以容易解析。
- -I(大写) 在SMP环境,表示任务的CPU使用率/内核数量
- -l 显示命令名和所有参数
pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ]
pidstat -u -w 1 5

pidstat: 能看磁盘、内存、cpu的数据,主要看cpu的上下文数据
- PID:进程ID
- %usr:进程在用户空间占用cpu的百分比
- %system:进程在内核空间占用cpu的百分比
- %guest:进程在虚拟机占用cpu的百分比
- %CPU:进程占用cpu的百分比
- CPU:处理进程的cpu编号
- Command:当前进程对应的命令
- UID PID
- cswch/s 每秒主动任务上下文切换数量
- nvcswch/s 每秒被动任务上下文切换数量
更多说明查看:https://www.jianshu.com/p/3991c0dba094
中断 VS 上下文切换:
- 中断: 中断当前正在运行的,去做其他事情
- 上下文切换: 资源的切换
- 中断,一定会导致上下文切换,但是上下文切换,不一定会中断。
9、iostat: 看数据换入换出
iostat参数详解
- -c: 仅显示CPU统计信息,与-d选项互斥
- -d:仅显示磁盘统计信息,与-c选项互斥
- -h:使用NFS(Network File System网络文件系统)的输出报告,更加友好可读。需要使用-n参数开启NFS。
- -k:以 kb 为单位显示,默认情况下,iostat的输出是以block作为计量单位,加上这个参数可以以kb作为计量单位显示。(该参数仅在linux内核版本2.4以后数据才是准确的)
- -m:以 mb 为单位显示(该参数仅在linux内核版本2.4以后数据才是准确的)
- -N:显示磁盘阵列(LVM) 信息。
- -V:显示版本信息
- -x:显示更详细的磁盘报告信息,默认只显示六列,加上该参数后会显示更详细的信息(该参数仅在linux内核版本2.4以后数据才是准确的)
- -n:显示NFS(Network File System网络文件系统) 使用情况(该参数仅在linux内核版本2.6.17以后有效)
- -t:输出报告时显示系统时间
- -p:[ { device [,…] | ALL } ] 显示磁盘分区的相关统计信息(默认粒度只到磁盘,没有显示具体的逻辑分区)
- -y:跳过不显示第一次报告的数据,因为iostat使用的是采样统计,所以iostat的第一次输出的数据是自系统启动以来的累计的数据
- -y 这个参数非常重要,因为第一次数据不属于正常数据,所以如果做数据统计时,计入了统计,会影响最终数据结果
iostat -dx 1 3
iostat -dx 1 3 ------没有带m,数据单位,默认kb
- rrqm/s 合并的每秒读请求
- wrqm/s 合并的每秒写请求
- r/s 读/秒
- w/s 写/s
- rkB/s 读kb/s
- wkB/s
- avgrq-sz 平均情况的扇区数
- avgqu-sz 等待大的请求数
- await 等待的时间
- r_await 读等待的时间
- w_await 写等待的时间
- svctm 实际请求的时间
- %util 至少有一个活跃请求的所占的时间百分比
10.性能测试场景
I/O瓶颈
如果%iowait的值过高,表示硬盘存在I/O瓶颈
内存不足
%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU在等待分配内存,此时应加大内存容量
CPU资源不足
如果%idle值持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU
参考:https://blog.csdn.net/m369880395/article/details/127789732
性能测试-sysstat工具包(mpstat-主要查看CPU负载与iostat-看数据换入换出以及pidstat-主要看上下文切换)的更多相关文章
- Linux如何查看CPU负载
负载(load)是Linux机器的一个重要指标,直观了反应了机器当前的状态.如果机器负载过高,那么对机器的操作将难以进行. linux的负载高,主要是由于CPU使用.内存使用.IO消耗三部分构成.任意 ...
- 如何查看Linux的CPU负载
哪些工具可以查看 CPU 负载? 可以使用 top 命令.uptime 命令,特别是 top 命令,功能强大,不仅仅可以用来查看 CPU 负载. CPU 负载怎么理解?是不是 CPU 利用率? 要区别 ...
- 浅谈Linux下CPU利用率和CPU负载【转】
转自:https://blog.csdn.net/Alisa_xf/article/details/71430406 在Linux/Unix下,CPU利用率(CPU utilization)分为用户态 ...
- linux 查看CPU、内存、磁盘信息命令
[1]查看CPU信息 (1)查看CPU信息(型号) cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c (2)查看物理CPU个数 cat /pr ...
- cpu负载
查看cpu负载,我们经常会使用top,或者是uptime命令 但是这只能看到cpu的总体的负载情况.如果我们想看cpu每个核心的负载情况是看不到的. 所以我们可以用mpstat命令 服务器一共32核心 ...
- Linux CPU负载
昨天查看Nagios警报信息,发现其中一台服务器CPU负载过重,机器为CentOS系统.信息如下: 2011-2-15 (星期二) 17:50 WARNING - load average: 9.73 ...
- linux里的CPU负载
昨天查看Nagios警报信息,发现其中一台服务器CPU负载过重,机器为CentOS系统.信息如下: 2011-2-15 (星期二) 17:50 WARNING - load average: 9.73 ...
- redhat 7.6 查看硬件负载命令
1. 命令 查看CPU负载 命令1:uptime 命令2:cat /proc/loadavg 查看CPU信息:cat /proc/cpuinfo load average:表示平均1分钟内运行的 ...
- Linux查看CPU历史负载
sar -f /var/log/sa/sa20 -s 02:00:00 -e 06:00:00 | head -n 50 sysstat工具与负载历史回放 很多系统负载过高的时候我们是无法立即获知或者 ...
- (转)linux查看CPU性能及工作状态的指令mpstat,vmstat,iostat,sar,top
衡量CPU性能的指标: 1,用户使用CPU的情况:CPU运行常规用户进程CPU运行niced processCPU运行实时进程 2,系统使用CPU情况:用于I/O管理:中断和驱动用于内存管理:页面交换 ...
随机推荐
- 我不想再传递 nameof 了
有的时候抛出一个异常,我们需要知道是哪个方法抛出的异常.那么,我们可以通过传递 nameof 来获取调用者的方法名.但是,感觉很烦,每次都要传递 nameof.那么,有没有更好的方法呢? Caller ...
- maven项目构建报错:Could not find artifact com.xxx.cloud:xxx-cloud:pom:1.0-SNAPSHOT and 'parent.relativePath' points at wrong local POM
maven多模块项目打包的时候报错如下: [ERROR] [ERROR] Some problems were encountered while processing the POMs: [FATA ...
- element ui el-date-picker 禁止选择指定日期
1.日期选择器组件代码 <el-col :span="20"> <el-form-item label="活动起始日期值" prop=&quo ...
- 3 .NET Core笔试题
1.什么是ASP.NET Core? 2.ASP.NET Core 中AOP的支持有哪些? 3.ASP.NET Core Filter的注册方式有哪些? 4.ASP.NET Core Filter如何 ...
- GMAC网卡相关介绍与分析
GMAC网卡相关介绍与分析 目录 GMAC网卡相关介绍与分析 环境描述 MII MII RMII GMII RGMII SGMII GMAC网卡信息获取方法 获取GMAC网卡信息 查看PHY工作接口模 ...
- LG P4168 [Violet]蒲公英
\(\text{Problem}\) 强制在线静态询问区间众数 \(\text{Solution}\) 不得不说 \(vector\) 是真的慢 做 \(LOJ\) 数列分块入门 \(9\) 卡时间卡 ...
- Linux服务器数据备份恢复
转载csdn: https://blog.csdn.net/weixin_33794672/article/details/92894022
- 【ACR2015】持续临床缓解的RA患者能停用TNF拮抗剂吗?
标签: 类风湿关节炎; 药物减停; 生物制剂; 减停后复发 荷兰一项随机对照试验显示, 已获持续6个月临床缓解或低疾病活动度的RA患者在停用TNFi的6个月内约三分之一病情复发 Moghadam HG ...
- gdbOF阅读笔记
前言 今天阅读了一本说明书,<gdbOF: A Debugging Tool for OpenFOAM> 受himryangzz视频启发去读相关内容,在此对himryangzz表示感谢 希 ...
- Net6 Core Api(.net6)发布到IIS注意事项及显示HTTP 错误500.19解决方法
Net6 Core Api发布到IIS不同于webapi,依赖框架不同,配置也移至项目内Program.cs 一.发布到指定文件夹,和IIS,不过注意IIS应用程序池选择的是 "无托管代码& ...