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

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

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等情况进行压测
  • 技术人员为了确定当前环境、系统、服务器等性能情况而进行的测试,为了在同一环境条件下进行性能优化而进行的测试
  • 场景:数据库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 总采样次数
  • 显示信息

e2afd3e84f8749aabcc9dc9205a91caf.jpg

字段 说明
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 显示选择任务的线程的统计信息外的额外信息
  • 显示信息

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

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

压测工具 stress

  • 多进程工具 ,模拟IO密集型应用、CPU密集型应用、多进程等待CPU调度场景, 对CPU,内存,IO等情况进行压测
  • 参数说明
  • image.png(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,然后在具体看某个进程导致的资源问题。


6091282650694d91a0e2d31655793f07.jpg

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

e8c83b2837f640b986716eb409adec86.jpg

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



74a5c7da6b874bd3b3199e35069dfb64.jpg

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

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



ee56aef49ad74714bdc6691bcff6d216.jpg

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

34e1e4f9cf4046a4a3ead88ba6839ef1.jpg


71504489b3424afd9bb1fc4afe7ecf20.jpg

e99dfaa9e0e94566b224dc33b9b5fa44.jpg

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

e33029023e46481082c868d54e23875b.jpg


c1b35bc77e67401085976bea35af33b0.jpg

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

d59bcd7c25824310b098401d3474b2c8.jpg

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

f5401db461fa4d66992aef2c122dcdf6.jpg

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

9bd712e060f54b5cbc6267fee706a8a7.jpg

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

390b77fe0d0a4bf3866453c7cbab30e1.jpg

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

1041b20770364b348d3dc1398a2d05dc.jpg


404da1c23c684038b1e0f22ad34458a8.jpg

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

207259bd00fa46f3beb5e16ea702bed5.jpg


142ddc14306b41adadd637b5771d03cf.jpg

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

(1)top中的wa解释

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

151b2bff584d443794242a98f3ef3e26.jpg

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

9a80b1331d2a43e6b64a8dea41d360f8.jpg

(3)vmstat 中的wa

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

988476016ae54f6c9aed36314b73940c.jpg(4)pidstat中的wait解释

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


fa748fbf61e74ee39085ce6f3180885e.jpg

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


相关实践学习
CentOS 8迁移Anolis OS 8
Anolis OS 8在做出差异性开发同时,在生态上和依赖管理上保持跟CentOS 8.x兼容,本文为您介绍如何通过AOMS迁移工具实现CentOS 8.x到Anolis OS 8的迁移。
目录
打赏
0
0
0
0
60
分享
相关文章
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot 是阿里云推出的一款操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行和系统运维调优等功能。通过简单的命令行操作,用户可以快速获取所需信息并执行任务,极大提升了Linux系统的使用效率。安装步骤简单,只需在阿里云服务器上运行几条命令即可完成部署。使用过程中,OS Copilot不仅能帮助查找命令,还能处理文件和复杂场景,显著节省了查找资料的时间。体验中发现,部分输出格式和偶尔出现的英文提示有待优化,但整体非常实用,特别适合Linux初学者。
102 10
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
Linux 操作系统
在 Linux 中,UID(用户 ID)是标识用户身份的重要概念。UID 唯一标识每个用户,通过 UID 可区分不同用户类别:UID 0 为超级用户,1-999 为系统用户,1000 及以上为普通用户。因此,正确选项为:UID 标识用户、可区分用户类别、普通用户 UID 大于 1000。
|
17天前
|
Linux 操作系统的诞生与发展历程
步探索与准备: 1991年初,林纳斯·托瓦兹开始在一台386sx兼容微机上学习minix操作系统。通过学习,他逐渐不能满足于minix系统的现有性能,并开始酝酿开发一个新的免费操作系统。
44 8
Linux 操作系统的诞生与发展历程
阿里云操作系统控制台——ECS操作与性能优化
本文详细介绍如何操作阿里云服务器ECS,从开通到组件安装及内存诊断。首先,通过选择操作系统(如Alibaba Cloud Linux 3)并开通服务,创建RAM用户并授予权限。接着,安装所需组件,支持节点或集群安装。最后,利用内存全景诊断功能,输入实例ID或Pod名称发起诊断并解析结果。这一流程帮助用户高效搭建计算环境,提升技术能力,确保业务稳定运行,并提出优化建议以改善用户体验。
46 8
Linux系统查看操作系统版本信息、CPU信息、模块信息
在Linux系统中,常用命令可帮助用户查看操作系统版本、CPU信息和模块信息
148 23
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot是由阿里云推出的操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行等功能,极大提升了Linux系统的使用效率。用户只需通过简单的命令或自然语言描述问题,OS Copilot即可快速提供解决方案并执行相应操作。例如,查询磁盘使用量等常见任务变得轻松快捷。此外,它还支持从文件读取复杂任务定义,进一步简化了操作流程。虽然在某些模式下可能存在小问题,但总体上大大节省了学习和操作时间,提高了工作效率。
149 2
OS Copilot-操作系统智能助手-Linux新手小白的福音
os-copilot在Alibaba Cloud Linux镜像下的安装与功能测试
我顺利使用了OS Copilot的 -t -f 功能,我的疑惑是在换行的时候就直接进行提问了,每次只能写一个问题,没法连续换行更有逻辑的输入问题。 我认为 -t 管道 功能有用 ,能解决环境问题的连续性操作。 我认为 -f 管道 功能有用 ,可以单独创建可连续性提问的task问题。 我认为 | 对文件直接理解在新的服务器理解有很大的帮助。 此外,我还有建议 可以在非 co 的环境下也能进行连续性的提问。
85 7
深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器
本文将详细介绍阿里云的Alibaba Cloud Linux操作系统控制台的功能和优势。
105 6
云上体验最佳的服务器操作系统 - Alibaba Cloud Linux | 飞天技术沙龙-CentOS 迁移替换专场
本次方案的主题是云上体验最佳的服务器操作系统 - Alibaba Cloud Linux ,从 Alibaba Cloud Linux 的产生背景、产品优势以及云上用户使用它享受的技术红利等方面详细进行了介绍。同时,通过国内某社交平台、某快递企业、某手机客户大数据业务 3 大案例,成功助力客户实现弹性扩容能力提升、性能提升、降本增效。 1. 背景介绍 2. 产品介绍 3. 案例分享
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等