首页 > 系统相关 >【操作系统】Linux性能优化诊断pidstat+mpstat详解

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

时间:2023-01-18 17:31:56浏览次数:44  
标签:上下文 pidstat 切换 IO Linux 进程 mpstat CPU


文章目录

  • ​​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 查看版本

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

  • 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

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

  • 什么是基准测试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

总采样次数

  • 显示信息

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

字段

说明

CPU

全部CPU和某个CPU,从0开始。下面每一行项加起来就是100%

%usr

用户态所使用CPU时间的百分比,CPU使用率

%nice

nice值为负进程的CPU时间,即使用nice命令对进程进行降级时CPU的百分比

%sys

内核态所使用CPU时间的百分比,CPU使用率

%iowait

CPU在等待I/O操作完成所消耗的时间,高表示可能I/O存在瓶颈

%irq

用于硬中断的CPU百分比

%soft

用于软中断的CPU百分比

%steal

虚拟机强制CPU等待的时间百分比

%guest

虚拟机占用CPU时间的百分比

%gnice

CPU运行niced guest虚拟机所花费的时间百分比

%idle

CPU空闲且系统没有未完成的磁盘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

显示选择任务的线程的统计信息外的额外信息

  • 显示信息

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

字段

说明

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,然后在具体看某个进程导致的资源问题。

【操作系统】Linux性能优化诊断pidstat+mpstat详解_上下文切换_05

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

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

  • **详细分析思路:**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

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

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

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

【操作系统】Linux性能优化诊断pidstat+mpstat详解_上下文切换_08

字段

说明

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秒出一个报告数据,一共出具三次

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

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


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

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出一个报告数据,一共出具三次

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

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

  • 对进程和任务的使用情况进行,发现%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瓶颈出现问题

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

字段

说明

PID

进程ID

cswch/s

每秒自愿上下文切换的次数

nvcswch/s

每秒非自愿上下文切换的次数

Command

当前进程对应的命令

  • pidstat -t -p pid 显示进程里面的线程的统计信息

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

字段

说明

TGID

主线程ID

TID

线程ID

%usr

进程在用户空间占用CPU的百分比

%system

进程在内核空间占用CPU的百分比

%guest

进程在虚拟机占用CPU的百分比

%CPU

进程占用CPU的百分比

CPU

处理进程的CPU编号

Command

当前进程对应的命令

  • pidstat -wt -1 组合命令,看具体进程里面的线程上下文切换情况

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

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的性能。

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

字段

说明

r

r (running or runnable)就绪队列的长度,包括正在运行和等待CPU的进程数

b

b(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 组合命令,查看进程中具体线程的上下文切换情况

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

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

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

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


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

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

(1)top中的wa解释

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

【操作系统】Linux性能优化诊断pidstat+mpstat详解_上下文切换_22

(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的时间,一种是网络,一种是磁盘

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

(3)vmstat 中的wa

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

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

(4)pidstat中的wait解释

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

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

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


标签:上下文,pidstat,切换,IO,Linux,进程,mpstat,CPU
From: https://blog.51cto.com/u_15646271/6019335

相关文章

  • linux firewalld服务使用
    1、使用systemctl管理服务systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。启动一个服务:systemctlstartfirewalld.service......
  • linux系统中更新python
    Linux系统中更新Python首先到Python的Ftp服务器上(https://www.python.org/ftp/python/),找到你喜欢的版本的Python。我选择的就是3.11.1版本的Python。在Linux服务......
  • Linux-vi/vim编辑器
         ......
  • linux : No such file or directory
    :NosuchfileordirectoryLinux下用./a.py类似命令时只显示标题所示信息::Nosuchfileordirectory原因是直接把Windows下的脚本传输到了linux上,Windows的回车符是'......
  • Linux 挂载大于2T的硬盘
    一、初始化硬盘    查看系统版本cat/proc/version     查看硬盘信息fdisk-l     格式化分区由于fdisk仅支持2T以内硬盘分区,当大于2T时,需要使用pa......
  • linux安装mysql8后的登陆问题
    通过宝塔面板快速安装了mysql8,然后到了要登陆mysql的时候想起来不知道密码,这时候就要强制重置mysql密码了。修改/etc/my.cnf中的mysql配置,添加一句话来跳过密码验证然......
  • linux-sed-文本编辑命令
    Md2Allexportdocumentsed命令详解简介sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace),接着用s......
  • 前端Linux部署命令与流程记录
    以前写过一篇在Linux上从零开始部署前后端分离的Vue+Springboot项目,但那时候是部署自己的个人项目,磕磕绊绊地把问题解决了,后来在公司有了几次应用到实际生产环境的经验,发......
  • linux jenkins maven工程创建打jar包
    1.首相在Linux上安装Java环境(请自行百度)2.安装maven(简单说一下步骤,下载maventar包,解压后配置环境变量,mvn-v命令验证)配置maven依赖路径,打包时要用到依赖,编辑settings.xml......
  • linux jenkins添加windows节点
    1.添加jenkinsnode2.下载jar包上面提供两种方法,第一种下载文件,默认java去启动和运行程序。第二个,你可以拷贝这个命令,放到一个记事本文件,然后保存为bat文件,双击bat文件也......