性能测试-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

posted @   依羽杉  阅读(637)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示