性能测试-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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!