mpstat——系统调优

mpstat——系统调优

文章目录

一、mpstat概述
二、mpstat使用

  1. 下载软件包
  2. 命令参数
  3. 参数含义
  4. 平均负载信息

三、压力测试

  1. 下载工具包
  2. 参数

四、查看统计信息
参数
五、实例操作

  1. 实验目的
  2. 测试CPU使用的负载状态

​ 平均系统的负载情况
​ 模拟压力测试前后对比

  1. 模拟I/O负载
  2. 模拟大量进程使用

总结

一、mpstat概述

mpstat (multiprocessor state) 可以查看所有cpu的平均负载,也可以查看指定cpu的负载。所以mpstat其实就是主要查看CPU负载的一个工具。是一款常用的多核CPU性能分析工具,用来实时查询每个CPU的性能指标,以及所有CPU的平均指标。

二、mpstat使用

1、下载软件包

它是Linux性能工具集sysstat中的一个工具,所以我们要装上sysstat,安装方法随不同的系统略有不同,sysstat是一个软件包,包含监测系统性能及效率的一组工具,这些工具对于我们收集系统性能数据,比如:CPU 使用率、硬盘和网络吞吐数据,这些数据的收集和分析,有利于我们判断系统是否正常运行.

yum install sysstat -y

2、命令参数

参数 描述
-P 指定要监控哪个CPU ,范围是 [0~n-1] ,ALL表示监控所有CPU都监控
internval 相邻两次采样的间隔时间
count 采样的次数,count只能和internval一起使用
[root@localhost ~]# mpstat -P ALL 3 2
Linux 3.10.0-1160.102.1.el7.x86_64 (localhost.localdomain)      02/02/2024      _x86_64_        (40 CPU)

03:18:46 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03:18:49 AM  all    0.04    0.00    0.05    0.00    0.00    0.00    0.00    0.00    0.00   99.91
03:18:49 AM    0    0.00    0.00    0.33    0.00    0.00    0.00    0.00    0.00    0.00   99.67
03:18:49 AM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:18:49 AM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:18:49 AM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:18:49 AM    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:18:49 AM    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:18:49 AM    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:18:49 AM    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:18:49 AM    8    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:18:49 AM    9    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:18:49 AM   10    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:18:49 AM   11    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:18:49 AM   12    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:18:49 AM   13    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:18:49 AM   14    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:18:49 AM   15    0.67    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.33
03:18:49 AM   16    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:18:49 AM   17    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:18:49 AM   18    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:18:49 AM   19    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:18:49 AM   20    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:18:49 AM   21    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

3、参数含义

参数 描述

  • 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的空闲时间的百分比

4、平均负载信息

当系统变慢,用top或uptime来了解系统的负载情况,系统平均负载是指在特定时间间隔内运行队列中的平均进程数,如果单个CPU内核的当前活动进程数不大于3的话,那么系统的性能是良好的。

[root@localhost ~]# uptime
 03:21:21 up 53 days, 5 min,  3 users,  load average: 0.00, 0.02, 0.05
  • 3users:当前有3个用户登录;
  • load average:平均负载
    0.00:1分钟
    0.01:5分钟
    0.05:15分钟

三、压力测试

压力测试的方法有很多,这里通过stress工具来进行对CPU、内存、IO以及磁盘的压力测试(可以指定CPU的个数)

1、下载工具包

yum install -y epel-release    	#需要先下载所需要的依赖包否则直接下载stress软件包工具不成功
yum install -y stress	

2、参数

参数 详解

  • -c --cpu 产生n个进程,每个进程都反复不停的计算随机数的平方根
  • -i --io 产生n个进程,每个进程反复调用 将内存上的内容写到硬盘上
  • -m -vm 产生n个进程,每个进程不断分配和释放内存
  • -t --timout 在n秒后结束进程
  • -d --hdd 产生n个不断执行 write 和unlink函数的进程(创建文件、写入内容、删除文件)

四、查看统计信息

pidstat 是一个常用的进程性能分析工具,可以用pidstat来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标。

参数

参数 详解

  • -u 默认的参数,显示各个进程的CPU使用统计
  • -r 显示各个进程的内存使用统计
  • -d 显示各个进程的IO使用情况
  • -p 指定进程号
  • -w 显示每个进程的上下文切换情况
  • -t 显示选择任务的线程的统计信息外的额外信息
  • -V 版本号
  • -h 在一行上显示了所有活动,这样其他程序可以容易解析
  • -I(大写) 在SMP环境,表示任务的CPU使用率/内核数量
  • -l 显示命令名和所有参数

五、实例操作

1、实验目的

采用stress压力测试工具,模拟CPU 负载的情况,高IO的情况,使用uptime查看平均负载,使用mpstat和pidstat工具,找出负载高的根源

2、测试CPU使用的负载状态

平均系统的负载情况

[root@localhost ~]# uptime
 11:25:26 up 7 days, 19:45,  1 user,  load average: 0.00, 0.00, 0.00

模拟压力测试前后对比

  1. 压力测试前
[root@localhost ~]# mpstat -P ALL 1 1
Linux 5.14.0-391.el9.x86_64 (localhost.localdomain)     2024年02月02日  _x86_64_        (8 CPU)

11时26分57秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11时26分58秒  all    0.12    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.88
11时26分58秒    0    0.99    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.01
11时26分58秒    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11时26分58秒    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11时26分58秒    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11时26分58秒    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11时26分58秒    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11时26分58秒    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11时26分58秒    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

平均时间:  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
平均时间:  all    0.12    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.88
平均时间:    0    0.99    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.01
平均时间:    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
平均时间:    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
平均时间:    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
平均时间:    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
平均时间:    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
平均时间:    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
平均时间:    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

  1. 压力测试

通过stress工具对系统进行压力测试

stress --cpu 4 --timeout 600	#进行压力测试 对2快cpu 进行增压 持续600s

image-20240202145927635

  1. 压力测试结果

image-20240202150003766

也可以通过pidstat命令对进程和任务的使用情况进行刷新

pidstat -u 5   	#查看运行中的进程和任务,每5秒刷新一次(时间可以自己指定)
查看运行中的进行和任务,stress对2块cpu使用率过高

原因:stress工具给系统产生的压力过大,倒是系统使用率过高

image-20240202150052841

解决方案:杀死正在使用的stress进程

image-20240202150259170

3、模拟I/O负载

这里也是i通过stress工具进行压力测试

stress --io 15 --timeout 600		#进行压力测试,产生15个进程,持续600秒
-i : --io  产生n个进程,每个进程反复调用 将内存上的内容写到硬盘上

image-20240202150415019

:使用stress无法模拟iowait升高,但sys(表示内核进程使用的 CPU 百分比。)升高。stress -i参数表示通过系统调用sync来模拟IO问题,但sync是刷新内存缓冲区数据到磁盘中,以确保同步。如果内存缓冲区内没多少数据,读写到磁盘中的数据也就不多,没法产生IO压力。
使用SSD(固态硬盘)磁盘的环境中尤为明显,iowait一直为0,但因为大量系统调用,导致系统CPU使用率sys升高。

stress --io 15 --hdd 15 --timeout 600
-d : --hdd  产生n个不断执行 write 和unlink函数的进程(创建文件、写入内容、删除文件)

-i : --io  产生n个进程,每个进程反复调用 将内存上的内容写到硬盘上

image-20240202152310740

使用mpstat命令读去IO的读写占用比

image-20240202155223537

通过pidstat命令从去查看进程使用情况

image-20240202161340718

解决方案:杀死进行后即可解决占用的情况

image-20240202161528932

image-20240202161546027

4、模拟大量进程使用

当系统中运行进程超出 CPU 运行能力时,就会出现等待 CPU 的进程。比如,我们还是使用 stress,但这次模拟的是 30 个进程

image-20240202161636143

通过uptime命令查看CPU状态

image-20240202161702294

image-20240202161739008

image-20240202161759332

image-20240202161825618

总结

平均负载和CPU使用率的关系
平均负载不仅包含正在使用CPU的进程,还包括等待CPU和等待IO的进程。而CPU的使用率,是单位时间内CPU的繁忙情况,跟平均负载不一定完全对应,比如:

  1. 计算密集型进程,会大量使用CPU导致平均负载增高,这时,两者一致。
  2. I/O密集型进程,等待I/O导致负载很高,但CPU使用率不一定高。
  3. 大量等待CPU的进程调度也会导致平均负载增高,此时CPU的使用率也会比较高。
posted @ 2024-02-02 16:23  寻梦99  阅读(745)  评论(0)    收藏  举报