【操作系统】Linux性能优化诊断pidstat+mpstat详解

news2024/11/18 22:58:07

文章目录

        • 1.CPU压测环境准备
        • 2.pidstat+mpstat命令详解
        • 3.CPU密集型应用案例实战
        • 4.IO密集型应用案例实战
        • 5.CPU多进程调度案例实战
        • 6.pidstat命令详解进阶
        • 7.性能监控命令vmstat详解
        • 8.CPU上下文切换案例实战
        • 9.top、mpstat、pidstat、vmstat中wait含义

1.CPU压测环境准备

(1)目标:分析Linux相关性能指标,找出CPU平均负载升高的进程和原因

  • 平均负载升高的主要原因

  • 多个进程争抢CPU、等待IO、CPU上下文切换

  • 命令:mpstats(全局)多核CPU性能分析程序,实时查看每个CPU的性能指标和全部CPU的平均性能指标

  • 命令:pidstats(局部)实时查看进程的CPU、内存、I/O、上下文切换等指标

  • 命令:vmstats(全局)实时查看系统的上下文切换(跨进程间,同个进程里多个子线程)、系统中断次数

(2)环境准备

  • 命令安装 sysstat
yum install gcc -y
yum install unzip -y

#sysstat资料包下载:https://github.com/sysstat/sysstat,下载完成上传服务器解压
unzip sysstat-master.zip

cd sysstat-master
./configure
make && make install
  • 通过 pidstat -V 查看版本

在这里插入图片描述

  • vmstats(多数系统自带)

  • 两大模拟工具介绍+安装

    • stress多进程工具,模拟IO密集型应用、CPU密集型应用、多进程等待CPU调度场景,对CPU、内存、IO等情况进行压测
yum install -y epel-release

yum install stress -y
  • sysbench多线程基准测试工具,模拟上下文切换过多场景
yum -y install make automake libtool pkgconfig libaio-devel
yum -y install mariadb-devel openssl-devel
yum -y install postgresql-devel

unzip sysbench-master.zip
cd sysbench-master
./autogen.sh
./configure --without-mysql
make && make install
  • sysbench --version

在这里插入图片描述

  • 什么是基准测试Banchmark Testing
    • 指通过设计科学的测试方法,测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的和可对比的测试

    • 技术人员为了确定当前环境、系统、服务器等性能情况而进行的测试,为了在同一环境条件下进行性能优化而进行的测试

    • 场景:数据库sql语句、索引、应用代码、网络、机器硬件配置等

    • 核心点:

      • 测试过程是可重复进行的
      • 每次的基准测试都应该在相同的环境条件下进行,除了某项测试变动,其他的软件和硬件组件等各种保持一致
      • 除了被测试系统是出于运行和可调整状态外,要避免有其他程序或者调整,以免影响基准测试结果

2.pidstat+mpstat命令详解

(1)sysstats工具包的命令mpstats+pidstats

  • 【全局命令】mpstats
  • 全称Multprocessor Statistics,多核CPU性能分析程序,实时查看每个CPU的性能指标和全部CPU的平均性能指标
  • 场景:当系统变慢,CPU平均负载增大时,判断是CPU的使用率增大,还是IO压力增大的情况导致
  • 格式 mpstat [-P {|ALL}] [ <时间间隔>] [ <次数> ] 比如 mpstat -P ALL 2 3 每隔2秒出一个报告数据,共出具3次
  • 参数说明
参数说明
-P指定监控哪个CPU,范围是[ 0~(N-1)],ALL表示监控所有CPU都监控
internal两次采样的间隔时间
count总采样次数
  • 显示信息

在这里插入图片描述

字段说明
CPU全部CPU和某个CPU,从0开始。下面每一行项加起来就是100%
%usr用户态所使用CPU时间的百分比,CPU使用率
%nicenice值为负进程的CPU时间,即使用nice命令对进程进行降级时CPU的百分比
%sys内核态所使用CPU时间的百分比,CPU使用率
%iowaitCPU在等待I/O操作完成所消耗的时间,高表示可能I/O存在瓶颈
%irq用于硬中断的CPU百分比
%soft用于软中断的CPU百分比
%steal虚拟机强制CPU等待的时间百分比
%guest虚拟机占用CPU时间的百分比
%gniceCPU运行niced guest虚拟机所花费的时间百分比
%idleCPU空闲且系统没有未完成的磁盘I/O请求的时间百分比,CPU使用率低,iowait高,idle低的话可能是等待IO
  • 【局部命令】pidstat

  • 实时查看进程的CPU、内存、I/O、上下文切换等指标

  • 格式:pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ] 比如:pidstat -u 2 3 每隔2秒出一个报告数据,一共出具3次

  • 输出排序 pidstat -u | sort -k 8 -r

    • sort 排序
    • 指定排序用哪一列,下面的例子中是第8列:%CPU
    • -r 倒序
  • 参数信息

参数说明
-u默认的参数,显示各个进程的CPU使用统计,监控CPU,pidstat和pidstat -u -p ALL是等效的
-r显示各个进程的内存使用统计,监控内存
-d显示各个进程的IO使用情况,监控硬盘
-p指定进程号,比如pidstat -p 5
-w显示每个进程的上下文切换情况
-t显示选择任务的线程的统计信息外的额外信息
  • 显示信息

在这里插入图片描述

字段说明
PID进程ID
%usr进程在用户态所使用的CPU时间的百分比,CPU使用率
%system进程在内核态所使用的CPU时间的百分比,CPU使用率
%guest进程在虚拟机占用cpu的百分比
%wait进程等待CPU的时间百分比,进程处于就绪队列中的状态等待CPU调度运行的百分比
%CPU进程占用cpu的百分比,和top命令一样 等于 用户态CPU+内核态 CPU,如果要区分cpu哪个态多则用pidstat,不包括 %wait
CPU处理进程的CPU编号
Command当前进程对应的命令

3.CPU密集型应用案例实战

准备机器:2核8ESC服务器

压测工具 stress

  • 多进程工具 ,模拟IO密集型应用、CPU密集型应用、多进程等待CPU调度场景, 对CPU,内存,IO等情况进行压测
  • 参数说明
参数说明
–timeout指定运行多少秒
–cpu N产生多个处理sqrt()函数的CPU进程,每个进程高频的计算随机数的平方根,模拟 CPU 计算密集型场景
–io N产生多个处理sync()函数的磁盘I/O进程,每个进程高频调用 sync(),刷内存缓冲区到磁盘,模拟 I/O 密集型场景
–vm N每个进程高频调用内存分配 malloc() 和 内存释放 free() 函数
–vm-bytes指定 malloc() 时申请内存的字节数,默认256MB
–hdd N产生N个高频执行write和unlink函数的进程 (创建/写入/删除 文件) , 属于磁盘IO进程
–hdd-bytes每个 hdd worker进程写的byte数,默认1G

(1)模拟用户态CPU密集应用

(1) 模拟一个CPU核的使用率100%,对1个CPU进行压力测试 持续600s stress --cpu 1 --timeout 600
(2) -d 参数表示高亮显示变化的区域 watch -d uptime
(3) mpstat 查看CPU使用率情况,每5s监控所有CPU情况 mpstat -P ALL 5
(4) 查看运行中的进程和任务,每5s刷新一次 pidstat -u 5

当系统变卡时,先看全局,找出系统是哪个资源出问题,是CPU还是IO,然后在具体看某个进程导致的资源问题。

在这里插入图片描述

  • 当杀掉stress进程时,CPU使用率恢复正常

在这里插入图片描述

  • **详细分析思路:**uptime运行一分钟后,两个核的CPU负载是1,mpstat查看当前系统的CPU使用率,发现CPU总使用率到达了50%,一个核的使用率到达了100%,%iowait为0,不存在io瓶颈,在通过pidstat对进程核任务的使用情况进行查看,发现stress对CPU其中一核的使用率达到了100%,最终定位到这个问题进程。
  • **注意:**CPU使用率高,CPU平均负载也高; CPU平均负载高,CPU使用率不一定高

(2)模拟内核态CPU密集应用

(1) 模拟2个IO进程,持续600s stress --io 2 --timeout 600
(2) -d参数表示高亮显示变化的区域 watch -d uptime
(3) mpstat查看CPU使用率情况,每5s监控CPU使用情况 mpstat -P ALL 5
(4) 查看运行中的进程和任务,每5秒刷新一次 pidstat -u 5

在这里插入图片描述

4.IO密集型应用案例实战

(1)pidstat 查看进程IO使用情况,显示各活动进程的IO使用统计

在这里插入图片描述

字段说明
PID进程ID
kB_rd/s每秒从磁盘读取的KB
kB_wr/s每秒写入磁盘KB
kB_ccwr/s每秒进程被取消向磁盘写的数据量(以kB为单位)
iodelay块I/O延迟,包括等待同步块I/O和换入块I/O结束的时间
Command当前进程对应的命令
(1) 模拟两个磁盘IO进程,持续600s stress --hdd 2 --hdd-bytes 6G --timeout 600
(2) -d 参数表示高亮显示变化的区域 watch -d uptime
(3) mpstat查看CPU使用率情况,每5秒监控所有CPU情况 mpstat -P ALL 2 3 每隔2秒出一个报告数据,一共出具三次
(4) 查看运行中的进程和任务,每5s刷新一次 pidstat -d 2 3每隔2秒出一个报告数据,一共出具三次

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.CPU多进程调度案例实战

(1) 模拟8个进程,也可以更多,持续600s stress --cpu 8 --timeout 600
(2) -d参数表示高亮显示变化的区域 watch -d uptime
(3) mpstat查看CPU使用率情况,每5秒监控所有CPU情况 mpstat -P ALL 2 3 每隔2秒出一个报告数据,一共出具三次
(4) 查看运行中的进程和任务,每5s刷新一次pidstat -u 2 3 每2s出一个报告数据,一共出具三次

在这里插入图片描述

在这里插入图片描述

  • 对进程和任务的使用情况进行,发现%wait高,说明cpu不够用在等待cpu调度上花费了不少时间

  • 8个进程在竞争2个cpu,每个进程等待cpu的时间达到75%(%wait),超出cpu计算能力的进程,导致了负载变高

  • pidstat -u CPU情况,默认

  • pidstat -d 磁盘IO情况 , 基本很低

6.pidstat命令详解进阶

  • pidstat -w 进程上下文切换情况,显示各活动进程的上下文切换情况统计
    • cswch/s 每秒自愿上下文切换的次数
      • 进程获取不了所需要的资源导致上下文切换,比如I/O问题瓶颈,内存资源不足,会发生自愿上下文切换
    • nvcswch/s每秒非自愿上下文切换的次数
      • 进程由于调度算法,时间片已到等原因,被系统【强制调度】发生上下文切换,比如大量进程在抢夺CPU资源时,会发生非自愿上下文切换,CPU瓶颈出现问题

在这里插入图片描述

字段说明
PID进程ID
cswch/s每秒自愿上下文切换的次数
nvcswch/s每秒非自愿上下文切换的次数
Command当前进程对应的命令
  • pidstat -t -p pid 显示进程里面的线程的统计信息

在这里插入图片描述

字段说明
TGID主线程ID
TID线程ID
%usr进程在用户空间占用CPU的百分比
%system进程在内核空间占用CPU的百分比
%guest进程在虚拟机占用CPU的百分比
%CPU进程占用CPU的百分比
CPU处理进程的CPU编号
Command当前进程对应的命令
  • pidstat -wt -1 组合命令,看具体进程里面的线程上下文切换情况

在这里插入图片描述

7.性能监控命令vmstat详解

(1)vmstat命令简介

  • 全称是Virtual Meomory Statistics(虚拟内存统计)的缩写,是对系统整体的情况进行统计,不细化到某个进程。实时查看系统CPU的队列情况、内存、块I/O、上下文切换情况、系统中断次数、cpu使用率等
  • 格式:vmstat [选项] [时间间隔]/[次数]
  • vmstat n 每隔n秒后输出一行信息,一般会加个-w进行加宽显示,比如vmstat -w 1
  • vmstat -SM 指定单位显示,默认KB,M表示MB
  • vmstat -t 带上时间戳信息
  • 更多参数信息 vmstat -h 或 man vmstat

(2)上下文切换和中断的合理范围:没啥CPU负载的时候也有每秒1万次内,不过也取决cpu的性能。

在这里插入图片描述

字段说明
rr (running or runnable)就绪队列的长度,包括正在运行和等待CPU的进程数
bb(Blocked)处于不可中断睡眠状态的进程数,一般是一些IO进程
swpd虚拟内存使用情况,单位是KB
free空闲内存空间,单位KB
buff缓冲的内存空间,单位KB
cache缓存的内存空间,单位KB
si从磁盘中交换到内存的数据量,单位KB,数值越大代表内存和磁盘之间的转换越频繁,系统的性能越差
so从内存中交换到磁盘中的数据量,单位KB,数值越大代表内存和磁盘之间越频繁,系统性能越差
bi从块设备中读入的数据的总量,单位是块,值越大代表系统的I/O越繁忙
bo写道块设别的数据的总量,单位是块,值越大代表系统的I/O越频繁
in(interrupt)每秒中断的次数
cs(context switch)每秒上下文切换次数,会浪费较多的CPU资源,比如我们调用系统函数,该值越小越好
us在用户态进程所使用的CPU时间的百分比,CPU使用率
sy在内核态进程所使用的CPU时间的百分比,CPU使用率
id空闲 CPU 的百分比,在Linux 2.5.41之前,这部分包含IO等待时间
wa等待 I/O 的 CPU 时间百分比
st被虚拟机所盗用的 CPU 百分比

8.CPU上下文切换案例实战

(1)CPU切换的场景

  • 系统的调用切换
  • 进程上下文切换
  • 线程上下文切换
  • 中断上下文切换

(2)sysbench命令简介

  • sysbench是一款开源的多线程性能测试工具,模拟线程上下文切换过多的场景
  • 可以执行CPU/内存/线程/IO/数据库等方面性能测试
  • 常用命令:sysbanch --threads=32 --time=300 threads run 32个线程持续运行5分钟,多线程压测。
(1) 模拟32个线程进行压测,持续600s sysbanch --threads=32 --time=300 threads run
(2) -d 参数表示高亮显示变化区域,watch -d uptime
(3) vmstat -w 1 查看系统CPU的队列情况、内存、块I/O、上下文切换情况、系统中断次数、CPU使用率等
(4) pidstat -w 查看正在运行的今后曾和任务上下文切换情况统计,显示个活动进程的上下文切换情况统计
	pidstat -t -p pid 显示进程中线程的统计信息
	pidstat -wt 1 组合命令,查看进程中具体线程的上下文切换情况

在这里插入图片描述

在这里插入图片描述

pidstat -w 进程上下文切换情况,查看是哪种上下文切换占比高,如果不加t只能看到进程层次的CPU调度

在这里插入图片描述
在这里插入图片描述

9.top、mpstat、pidstat、vmstat中wait含义

(1)top中的wa解释

wa,IO-wait: time waiting for I/O completion
等待io的时间,一种是网络,一种是磁盘

在这里插入图片描述

(2)mpstat中的iowait解释

%iowait Show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.
等待io的时间,一种是网络,一种是磁盘

在这里插入图片描述

(3)vmstat 中的wa

wa: Time spent waiting for IO.  Prior to Linux 2.5.41, included in idle.
等待io的时间,一种是网络,一种是磁盘

在这里插入图片描述

(4)pidstat中的wait解释

%wait : Percentage of CPU spent by the task while waiting to run.
表示进程等待 CPU 的时间百分比, 进程已经就绪等待CPU的分配

在这里插入图片描述

  • 总结:
    • 等待CPU的进程在CPU的就绪队列中,处于运行状态
    • 等待I/O的进程则处于不可中断状态,有磁盘IO、网络IO

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

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

相关文章

以人为本的方法打击身份欺骗

身份的概念是动态的——它一直在变化。在人类历史的大部分时间里&#xff0c;一个人的身份由他们的名字、他们的家庭关系和他们居住的地方组成。身份只有三四个元素。在过去的 100 年里&#xff0c;随着护照和其他身份证明文件的广泛使用&#xff0c;人们的身份也增加了额外的元…

Qt5 高分辨率支持

1. 结论 先说结论&#xff0c;在Qt5版本没有比较完美的解决方案。如果使用Qt系统提供的支持方式会出现各种小问题。如果可以的&#xff0c;建议升级为Qt6版本&#xff0c;能够更好支持高分辨率屏。而最终我在Qt5.12.12版本中&#xff0c;采用的方案是通过各种方法组合解决。 详…

【我和openGauss的故事】openGauss获奖项目讲解

文章目录前言参赛方案介绍系统需求分析主要功能模块设计思路字段基本数据分析页面及功能设计功能函数视图设计技术亮点及优势商业模式及市场前景功能测试项目总结前言 2022年8月30日华为鲲鹏应用大赛openGauss赛道上海赛区第三名获奖作品开源分享&#xff0c;我们团队参加本次…

再学C语言23:分支和跳转——if语句

一、简单if语句 if语句被称为分支语句&#xff08;branching statement&#xff09;或选择语句&#xff08;selection statement&#xff09;&#xff0c;功能是让程序选择分支中的一条前进 if语句一般形式&#xff1a; if(expression)statement 如果expression的值为真&am…

【数据结构】LeetCode移除链表元素、反转链表、链表的中间结点

目录 一、移除链表元素 1、题目说明 2、题目解析 二、反转链表 1、题目说明 2、题目解析 三、链表的中间结点 1、题目说明 2、题目解析 一、移除链表元素 1、题目说明 题目链接&#xff1a;移除链表的元素 给你一个链表的头节点 head &#xff0c;和一个整数 val&#xff0c;…

蓝牙资讯|苹果获得智能戒指专利,可用于交互 AR / VR 头显设备

美国商标和专利局&#xff08;USPTO&#xff09;批准并公示了苹果的一项智能戒指专利。这款戒指主要作为苹果混合现实头显设备的辅助交互设备&#xff0c;但可以和 iPhone、iPad、AirPods、Mac 和其它设备一起使用。 苹果希望通过智能戒指来改善 AR / VR 世界的交互体验&…

工程项目管理系统源码-简洁+好用+全面-工程项目管理系统

​ ​工程项目管理系统是指从事工程项目管理的企业&#xff08;以下简称工程项目管理企业&#xff09;受业主委托&#xff0c;按照合同约定&#xff0c;代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 ​系统定义 工程项目管理企业不直接与该工程项目的总承…

javafx实现的工资管理系统

&#x1f345;程序员小王的博客&#xff1a;程序员小王的博客 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 如有编辑错误联系作者&#xff0c;如果有比较好的文章欢迎分享给我&#xff0c;我会取其精华去其糟粕 &#x1f345;java自学的学习…

ESP8266 SDK开发(ESP8266_RTOS_SDK 3.x)之AiThinkerIDE_V1.5.2安装、配置以及编写烧录一个程序

【本文发布于https://blog.csdn.net/Stack_/article/details/128509864&#xff0c;未经允许不得转载&#xff0c;转载须注明出处】 前言 乐鑫官方不搞IDE&#xff0c;安信可搞了IDE&#xff0c;但是各版本之间安装配置有差异&#xff0c;还没有文档说明。官方安装配置教程不完…

CTFHUB技能树-SSRF-redis协议踩坑

在gopherus上面输入命令&#xff1a;python gophers.py --exploit redis 将自动生成的代码url解密可以得到 如果是get传参需要再进行一次url编码 虽然蚁剑连接不上但可以用urlshell?cmdls / 获取flag 接下来看可以连接蚁剑的代码 文件名最好还是用shell.php 我测试了s.…

【C++初阶8-vector实现】没想的那么简单!

前言 本期带来vector实现&#xff0c;和以前的顺序表差别不大。 博主水平有限&#xff0c;不足之处望请斧正&#xff01; 预备知识 实现参考SGI的stl30 我们看这种源码&#xff0c;要抓框架看&#xff1a;首先找类&#xff0c;看它的属性&#xff0c;再看方法 template &l…

全方位解析 C 端和 B 端的产品特性

近年来&#xff0c;互联网进入下半场&#xff0c;C 端流量红利逐渐消退&#xff0c;很多企业转向了 B 端服务&#xff0c;随之而来的是产品设计者的转型&#xff0c;现在越来越多的 C 端产品设计师开始涉足到 B 端产品的设计&#xff0c;这是一个知识迁移的过程&#xff0c;需要…

自动驾驶专题介绍 ———— 摄像头

文章目录介绍工作原理实现功能分类按通信协议区分按不同感光芯片按像元排列方式介绍 摄像头可以采集汽车周边的图像信息&#xff0c;跟人类的眼睛最为接近。摄像头可以拥有较广的视场角、较大的分辨率&#xff0c;还可以提供颜色和纹理等信息。这些信息对于实现自动驾驶功能是存…

Mentor-dft 学习笔记 day48-OCC With Capture Enable Clock Control Operation Modes

OCC With Capture Enable 有一个OCC具有capture_enable输入&#xff0c;可以与自由运行的慢速时钟一起使用。当OCC指定为启用捕获&#xff08;capture_trigger:capture_en&#xff09;时&#xff0c;在输入自由运行的慢时钟上添加时钟门控器&#xff0c;以从自由运行的时钟输…

影响宝宝大脑发育的6个坏习惯,你可能每天都在做

“望子成龙&#xff0c;望女成凤”这几乎是每个父母的愿望。虽然有一个高智商的天才宝宝太难了&#xff0c;但从不妨碍父母希望孩子更健康、更聪明。所以大家都比较关注宝宝的大脑发育&#xff0c;希望宝宝的大脑发育更好&#xff0c;长大后更聪明。但在日常生活中&#xff0c;…

android 12+从后台启动FGS限制

后台启动FGS限制 限制简介 以 Android 12&#xff08;API 级别 31&#xff09;或更高版本为目标平台的应用在后台运行时无法启动前台服务&#xff0c;少数特殊情况除外。 如果应用程序在后台运行时尝试启动前台服务&#xff0c;而前台服务不满足其中一种异常情况&#xff0c;系…

vue前端打包Docker镜像并nginx运行

首先说明咱们的前端项目是基于Vue的&#xff0c;反向代理使用的是nginx 1.打包vue前端项目生成dist文件夹上传至服务器 新建一个文件夹&#xff0c;叫vueDockerTest&#xff0c;下面的文件都需要。 cert是你存放ssl证书的文件夹&#xff0c;nginx.conf 是nginx的配置文件&am…

Kotlin 惰性集合操作-序列 Sequence

集合操作函数 和 序列 在了解 Kotlin 惰性集合之前&#xff0c;先看一下 Koltin 标注库中的一些集合操作函数。 定义一个数据模型 Person 和 Book 类&#xff1a; data class Person(val name: String, val age: Int) data class Book(val title: String, val authors: List…

jmeter 5.5+influxdb 2.0+grafana v9.3.2 - 压测看板setup

Docker set up 安装docker应用 https://docs.docker.com/desktop/install/mac-install/&#xff0c;在官网下载docker安装包&#xff0c;和安装其他的mac应用是一样的操作。 设置国内的镜像仓库&#xff08;拉取镜像会快很多&#xff09; {"registry-mirrors": [&q…

叠氮-聚乙二醇-羧酸;叠氮-单乙二醇-丙酸Azido-PEG1-acid;1393330-34-1小分子PEG衍生物

Azido-PEG1-acid 中文名称&#xff1a;叠氮-聚乙二醇-羧酸&#xff1b;叠氮-单乙二醇-丙酸 英文名称&#xff1a;Azido-PEG1-acid&#xff1b; 分子式&#xff1a;C5H9N3O3 分子量 &#xff1a;159.1 CAS&#xff1a;1393330-34-1 外观&#xff1a;粘稠液体或者固体粉末&#…