LINUX IOWAIT 是怎么回事,和数据库性能有关吗? (翻译)

news2024/11/26 10:21:55

705e79a2ed5c01a8dee776d6b6fda2a9.png

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共950人左右 1 + 2 + 3)新人会进入3群

我见过很多Linux性能工程师将CPU使用率中的“IOWait”部分视为指示系统是否受到I/O限制的东西。在本博客文章中,我将解释为什么这种方法是不可靠的,并介绍你可以使用的更好的指标。

让我们先进行一个小实验——在系统上产生大量的I/O使用:

sysbench  --threads=8 --time=0 --max-requests=0  fileio --file-num=1 --file-total-size=10G --file-io-mode=sync --file-extra-flags=direct --file-test-mode=rndrd run

da07a34018c9bc3518f9b70ff336a602.png

截止目前为止,一切都OK,可以看到I/O密集型工作负载明显对应于高的IOWait值(在vmstat中的“wa”列)。让我们继续运行我们的I/O限制工作负载并加入一个占用CPU大量负载:

sysbench --threads=8 --time=0 cpu run

3786333ae9fb7ed36c575f318ce17cfa.png

发生了什么?IOWait完全消失了,现在这个系统看起来完全没有受到I/O限制!

实际上,我们的第一个工作负载没有改变——它仍然受到I/O限制;只是当我们查看“IOWait”时,它变得看不见了!

要理解发生了什么,我们真的需要理解“IOWait”是什么以及它是如何计算的。

有一篇很好的文章对这个主题进行了更详细的介绍,但基本上,“IOWait”是闲置的CPU时间。如果CPU核因为没有要执行的工作而空闲,那么这段时间就被归到“idle”中。然而,如果CPU核因为某个进程正在等待磁盘而处于空闲状态,则I/O时间被归类到“IOWait”中。

然而,如果一个进程正在等待磁盘I/O,但是系统中的其他进程可以使用CPU,那么这段时间将会被计入这些进程的用户/系统时间,而不是“IOWait”。

由于这种记账方式,其他有趣的行为也是可能的。现在,让我们不再运行8个I/O限制的线程,而是在4核虚拟机上运行一个I/O限制的进程:

sysbench  --threads=1 --time=0 --max-requests=0  fileio --file-num=1 --file-total-size=10G --file-io-mode=sync --file-extra-flags=direct --file-test-mode=rndrd run

738a63200c0dda77bd19d8ef7b475044.png

即使这个进程完全受到I/O限制,我们也可以看到IOWait(wa)并不是特别高,不到25%。在有32、64或更多核的大型系统上,这样完全受到I/O限制的进程几乎不可见,产生一位数字的IOWait百分比。

因此,高IOWait显示系统中许多进程在等待磁盘I/O,但即使IOWait很低,磁盘I/O在系统上的某些进程中可能仍会有瓶颈。

如果IOWait不可靠,那么什么指标可以取而代之,可以为您提供更好的可见性?

首先,查看应用程序特定的可观察性。如果应用程序已经进行了良好的仪表化,它往往最好知道何时会受到磁盘的限制,以及哪些特定任务受到了I/O限制。

如果您只能访问Linux指标,请查看vmstat中的“b”列,这对应于被阻塞在磁盘I/O上的进程。即使是CPU密集负载并发进行,这将显示这些进程,而遮盖了IOWait:

410f8f23807c213291fbe1ea1c711edd.png

最后,您可以查看每个进程的统计信息,以查看哪些进程正在等待磁盘I/O

原文 https://www.percona.com/blog/understanding-linux-iowait/

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

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

相关文章

Redis线程模式

目录 redis6.0之前:单Reactor单线程 问:为什么Redis要选择单线程??? redis6.0后引入多线程IO redis6.0之前:单Reactor单线程 大致工作流程: 首先,调用 epoll_create() 创建一个 …

剑指 Offer 17: 打印从1到最大的n位数

首先,List类型的要么存Integer,要么存int[],并且后面实现是用ArrayList! 这边的i和j应该从1开始,因为0不能做高位也不能做位数。 这里注意,1是List的实现是用ArrayList,2是从1开始(1…

C++的引用 拷贝赋值和引用赋值

💯 博客内容:C的引用 拷贝赋值和引用赋值 😀 作  者:陈大大陈 🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信! 💖 欢迎大家&#…

排名前十的开放式蓝牙耳机,哪个蓝牙耳机好一点?

当前耳机最大的受众群体就是年轻人,最怕自己吵到别人,而且更注重自己的舒适度,所以开放式耳机自从出现以来就深受年轻人喜爱,这种耳机用起来很方便,而且振动感不强,不用进入耳道,拥挤耳朵。开放…

C++图形开发(8):空格键控制小球起跳

文章目录 1.绘制小球2.按下空格让小球跳起来 我们今天来实现下按下空格键控制小球的起跳(还没阅读之前文章的同学可以先去阅读一下:C图形开发专栏) 1.绘制小球 首先,我们要绘制小球,这里就不细讲啦,之前的…

4.1 探索LyScript漏洞挖掘插件

在第一章中我们介绍了x64dbg这款强大的调试软件,通过该软件逆向工程师们可以手动完成对特定进程的漏洞挖掘及脱壳等操作,虽然x64dbg支持内置Script脚本执行模块,但脚本引擎通常来说是不够强大的,LyScript 插件的出现填补了这方面的…

2020~2030年 中国智能驾驶市场和技术趋势分析及主流芯片方案概述

分析及主流芯片方案概述智能驾驶已经成为中国用户买车时首选的配置之一,从L0到L2的整个产品布局,已经是车厂卖车时候的重点宣传点,智能驾驶不同于自动驾驶,无论是法律法规和产品定义都有着明确且清晰的定义。用户本身智能驾驶产品…

十个创业九个死,如何看待大学生创业?

虽然大家都在说“十个创业九个死”,尤其是前几年疫情的影响,很多创业和开店铺的都以失败告终,可是对于大学生来说,创业是很值得去做的一件事情。 熟悉我的朋友都知道,我是从事软件开发行业的,虽然前几年的…

实训笔记7.5

实训笔记7.5 7.5一、座右铭二、软件--软件工程2.1 需求分析2.2 系统设计2.2.1 概要设计2.2.2 数据库设计2.2.3 详细设计 2.3 编码开发/实现2.4 系统测试2.5 系统部署运行和维护 三、Java界面编程---仅作了解四、maven--自动化构建工具4.1 作用:4.2 maven如何帮助我们…

C#常见技能_结构

大家好,我是华山自控编程朱老师 前几天一个学员在学习C#与结构交互时,也不知道结构法可以用来做什么 。下面我们就详细讲讲C# 和结构交互的相关知识。 在C#编程中,结构是一种数据类型,它可以用于存储和组织相关数据,并提供对数据…

MySQL原理探索——24 MySQL是怎么保证主备一致的

在前面的文章中,我不止一次地和你提到了 binlog,大家知道 binlog 可以用来归档,也可以用来做主备同步,但它的内容是什么样的呢?为什么备库执行了 binlog 就可以跟主库保持一致了呢?今天我就正式地和你介绍一…

Selenium 中并行测试的重要性

目录 前言 并行测试 Selenium 中的并行测试 使用 TestNG 和 Selenium 进行并行测试 为什么我们需要在 Selenium 中进行并行测试? 更多测试范围 减少测试时间 成本效益 优化 CI/CD 流程 持续测试 实施并行测试 总结 前言 随着技术的进步,测试…

【JavaEE进阶】Spring核心与设计思想

1,Spring是什么? 我们通常所说的Spring指的是 Spring Framework(Spring 框架),它是一个轻量级的 Java 开源框架,有着活跃庞⼤的社区。Spring 是为了解决企业应用开发的复杂性而创建的,不仅⽀持…

Linux网络抓包工具tcpdump

tcpdump 指令可列出经过指定网络界面的数据包文件头,可以将网络中传送的数据包的 “头” 完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供 and、or、not 等逻辑语句来帮助你摘取有用信息。   由于它需要将网络接口设置为…

青岛大学_王卓老师【数据结构与算法】Week04_11_案例分析与实现1_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–…

STM32网络通信Web Server中SSI和CGI的应用

介绍 最近由于项目功能需要,开始研究STM32 WebServer通信以及SSI和CGI应用方法。项目结束后,主要总结浏览器与STM32之间进行通行,STM32作为服务器而浏览器做为客户端进行通行。 文件介绍 此部分的代码是根据ST官方的Web Server例程的基础上…

ubuntu配置pppoe的详细过程

虽然我的是22,其实这跟ubuntu的具体版本没什么关系 1 为什么要装pppoe联网? 联想主机装上ubuntu后发现wifi网络在启动后一段时间找不到,突然搜索不了,后来问导师才知道师妹之前就是用这个电脑,然后也碰到过。 所以不…

开发抖音短视频账号矩阵系统技术实现能解决一机一号实名认证问题?

一、短视频账号矩阵系统解决一机一号实名认证问题? 目前站在开发者角度来看问的比较多,做开发技术类矩阵saas工具,需要的多账号怎么解决,这需要从两个方面来做开发解决。 第一、从开发角度来看技术开发首先解决代理ip分发问题&a…

SPSS读取纯文本文件

纯文本文件是通用的一种格式文件,根据纯文本文件中数据的排序方式,可以将其分为自由格式和固定格式。自由格式文本文件的数据项之间必须有分隔符,固定格式数据项之间不需要分隔符。 1.以自由格式读取数据 (1)选择“文…

【嵌入式Qt开发入门】如何使用Qt进行绘制实时图表——QChart 图表

要想使用 Qt Charts,我们的 Qt 版本得使用 Qt 5.7 之后的版本。其实 Qt Charts 并不是 Qt 5.7 才有的,是在 Qt 5.7 以前只有商业版本的 Qt 才有 Qt Charts。我们能免费下载的 Qt 版本都是社区(开源)版本。 Qt Charts 很方便的绘制…