【性能测试】缓慢的磁盘问题分析套路

2023-05-16

该文基于《性能之巅:洞悉系统、企业与云计算》的1.9.1 缓慢的磁盘章节调整而来

用户问题

Scott 是一家中型公司里的系统管理员。数据库团队报告了一个支持ticket(工单),抱怨他们有一台数据库服务器“磁盘缓慢”。

获取完整的问题陈述

Scott 首要的任务是多了解问题的情况,收集信息形成完整的问题陈述。ticket 中抱怨磁盘慢,但是并没解释这是否是由数据库引发的。Scott 的回复问了以下这些问题:

  • 当前是否存在数据库性能问题?如何度量它?(圈定问题表征及指标

  • 问题出现至今多长时间了?(圈定时间范围

  • 最近数据库有任何变动吗?(圈定影响因素,如数据库版本变动

  • 为什么怀疑是磁盘?(获取用户得出结论的例证

完整的问题陈述

数据库团队回复:“我们的日志显示有查询的延时超过了1000ms,这并不常见,就在过去的一周这类查询的数目达到了每小时几十个AcmeMon 显示磁盘在那段时间很繁忙。”

验证用户推测(磁盘缓慢)

可以肯定确实存在数据库的问题,但是也可以看出关于磁盘的问题更多的是一种猜测。Scott需要检查磁盘,同时他也要快速地检查一下其他资源,以免这个猜测是错误的。

获取错误信息

AcmeMon 是公司服务器的基础监控系统,基于mpstat(1)、iostat(1)等其他的系统工具,提供性能的历史图表。Scott 登录到AcmeMon 上自己查看问题。

确定问题分析方法

一开始,Scott 使用了一种叫做USE(utilization(资源利用率)、saturation(资源饱和度)、errors(发生错误的次数)) 的方法来快速检查系统瓶颈。正如数据库团队所报告的一样,磁盘的使用率很高,在80%左右,同时其他资源(CPU、网络)的使用率却低得多。历史数据显示磁盘的使用率在过去的一周内稳步上升,而CPU的使用率则持平。AcmeMon 不提供磁盘饱和(或错误)的统计数据,所以为了使用USE 方法,Scott 必须登录到服务器上并运行几条命令。[确定分析问题的方法USE]

确定问题&提出假设

他在**/proc 目录里检查磁盘错误数**,显示是零。他以一秒钟作为间隔运行iostat,对使用率和饱和率观察了一段时间。AcmeMon 报告80%的使用率是以一分钟作为间隔的。在一秒钟的粒度下,Scott 看到磁盘使用率在波动,并且常常达到100%,造成了饱和,加大了磁盘I/O 的延时

验证假设

为了进一步确定这是阻塞数据库的原因——延时相对于数据库的查询不是异步的——他利用动态跟踪脚本来捕捉时间戳和每次数据库被内核取消调度时数据库的栈跟踪。他发现数据库在查询过程中常常被一个文件系统读操作阻塞,一阻塞就是好几毫秒。对于Scott 来说,这些证据已经足够了。

确定磁盘性能指标

接下来的问题是为什么。磁盘性能统计显示负载持续很高。Scott 对负载进行了特征归纳以便做更多了解,使用iostat(1)来测量IOPS、吞吐量、平均磁盘I/O 延时和读写比。从这些结果,他计算出了平均I/O 的大小并对访问模式做了估计:随机或者连续。Scott 可以通过I/O级别的跟踪来获得更多的信息,然而,他觉得这些已经足够表明这个问题是一个磁盘高负载的情况,而非磁盘本身的问题。

提出新的假设

Scott 在ticket 中添加了更多的信息,陈述了自己检查的内容并上传了检查磁盘所用到的命令截屏。他目前总结的结果是由于磁盘处于高负载状态,从而使得I/O 延时增加,进而延缓了查询。但是,这些磁盘看起来对于这些负载工作得很正常。因此他问道,难道有一个更简单的解释:数据库的负载增加了?(数据库负载增加了,导致磁盘负载增加)

验证新的假设

数据库团队的回答是没有,并且数据库查询率(AcmeMon 并没有显示这个)始终是持平的。这看起来和最初的发现是一致的,CPU 的使用率也是持平的(相互交叉验证)。

提出新的猜测

Scott 思考着还会有什么因素会导致磁盘的高I/O 负载而又不引起CPU 可见的使用率提升他和同事简单讨论了一下这个问题。一个同事推测可能是文件系统碎片,碎片预计会在文件系统空间使用接近100%时出现。Scott 查了一下发现,磁盘空间使用率仅仅为30%

Scott 知道他可以进行更为深入的分析来了解磁盘I/O 问题的根源,但这样做太耗时。基于自己对内核I/O 栈的了解,他试图想出其他简单的分析,以此来做快速的检查。他想到这次的磁盘I/O 是由文件系统缓存(页缓存)未命中导致的。【提出新的猜测

验证猜测

Scott 进而检查了文件系统缓存的命中率(cachestat、cachetop),发现当前是91%。这看起来还是很高的(很好),但是他没有历史数据可与之比较。他登录到其他有相似工作负载的数据库服务器上,发现它们的缓存命中率超过了97%。他同时发现问题服务器上的文件系统缓存大小要比其他服务器大得多

提出新的猜测

于是他把注意力转移到了文件系统缓存大小服务器内存使用情况上,发现了一些之前忽视的事情:一个开发项目的原型应用程序不断地消耗内存,虽然它并不处于生产负载之下。这些被占用的内存原本可以用作文件系统缓存,这使得缓存命中率降低,让磁盘I/O 负载升高,损害了生产数据库服务器的性能

验证新的猜测

Scott 联系了应用程序开发团队,让他们关闭该应用程序,并将其放到另一台服务器上,作为数据库问题的参照。随后在AcmeMon 上Scott 看到了磁盘使用率的缓慢下降,同时文件系统缓存恢复到了它原先的水平。被拖慢的数据库查询数目变成了零,他关闭了ticket 并将它置为“已解决”。

归纳总结

导致数据库查询变慢的真凶是“与数据库同机部署的应用程序,该应用程序不停的消耗内存,使得文件缓存命中率降低,让I/O负载升高”。解决策略是“数据库服务独占一台机器,移除应用程序,减少资源竞争”。

寻找正凶的过程采用了“提出新的猜测-》确定判定指标–》收集指标数据–》分析指标数据–》验证猜测”的心动的研究方法。整体流程如下:

1、用户反馈的问题(有一台数据库服务器“磁盘缓慢”)

2、获取完成问题陈述(问题表征评判指标、问题开始时间、用户为什么猜测证据、确定问题表征近期变动)

3、验证用户猜测(收集信息链–》确定问题研究方法USE–》确定判定指标–》收集指标数据–》分析指标数据–》验证猜测–》提出新的猜测-》确定判定指标–》收集指标数据–》分析指标数据–》验证猜测)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【性能测试】缓慢的磁盘问题分析套路 的相关文章

随机推荐

  • 制作自己的个人网站方法

    随着个人创业的流行 xff0c 很多个人也需要一个比较详细的网站来展示自己 xff0c 开展个人业务 xff0c 或者积累粉丝等等 那么怎么制作自己的个人网站呢 xff1f 又该怎么制作得更个性好看 xff1f 下面就跟大家分享下制作方法
  • 傻瓜书,VMware里的Ubuntu

    转自 xff1a http bbs cnw com cn thread 136057 1 1 html 傻瓜书 xff0c VMware里的Ubuntu 0 预备知识 什么是Ubuntu 如果不了解这一点 xff0c 本文的内容似乎与您无关
  • 痞子衡单片机排行榜(2022Q4)

    痞子衡单片机排行榜 2022Q4 继2020年开办的 痞子衡嵌入式半月刊 之后 xff0c 从2023年1月份开始痞子衡将为大家带来新项目 痞子衡单片机排行榜 一年分四季 xff0c 每个季度发布一期 xff0c 以MCU主频和Corema
  • [pdf]使用spire读取PDF的文字和图片

    概述 最近在梳理某项目的数据标准 xff0c 从标准网下载了很多PDF格式的标准文件 xff0c 需要提取文字和图片 xff0c 所以写了个程序提取 xff1b 本文使用了免费版的Spire 约束 免费版的Spire一次只能提取PDF的10
  • JetPack系列之ViewBinding

    viewBinding的作用启用视图绑定Activity中使用视图绑定Framgent中使用视图绑定与findViewById相比 viewBinding的作用 启用视图绑定之后 xff0c 系统会为每个xml生成一个绑定类 xff0c 我
  • 正则表达式记录

    去掉所有非1到9或者字母的其它字符 private static String dealWithVersion String versionArg String regex 61 34 1 9a zA Z 34 versionArg 61
  • 批量kill掉带有某些标识的进程的shell命令

    微信公众号 xff1a WELTest 分享一个常用命令 xff0c 批量杀掉一批进程 xff0c 这里以tomcat为例 xff1a ps ef grep tomcat awk 39 print 2 39 xargs kill 9 命令解
  • 【VUE】renren-fast-vue跳过验证码及使用mock数据单独添加一个页面

    效果图 解决办法 1 使用官方演示系统数据 1 把代理打开设置为True 2 在修改config目录下的index js的target值为 xff1a http demo open renren io renren fast server
  • 【软件测试】以闭环思维解决BUG复现率高问题

    bug复现率 要求复现BUG数 总bug数 背景 软件测试中提Bug 作为每个测试人员都应该遇到过 那每个测试人员可能也会遇到不停帮开发复现Bug的问题 如果Bug复现对环境要求不高 那复现成本还是比较低的 那如果环境复杂 那复现成本还是比
  • 自动化测试:功能移植之存储过程数据正确性验证

    自动化测试 功能移植之存储过程数据正确性验证 背景说明 系统架构的变更及调整 会引相同功能在不同架构上的移植工作 功能移植工作会产生多种变式 每种变式的测试策略是不一致的 本文主要讨论的变式为 业务不发生变动 只进行代码移植 结果表结构与原
  • docker mysql:5.6镜像安装mysqlreport、pt-query-digest

    更新debian源 echo 34 deb http ftp cn debian org debian stretch main 34 gt etc apt sources list echo 34 deb http ftp cn debi
  • 性能测试:模型趋势预测,让生产性能预测

    随着系统复杂度的提升 系统架构复杂度 部署规模也在逐步提升 这对性能测试测试 分析都带来挑战 古语有云 兵马未动粮草先行 针对测试而言测试环境及数据就是 粮草 性能测试如果环境 数据差异较大 性能测试出来的结果对生产指导意义就不是很大 那如
  • 【python黑帽子2】netcat.py编写及使用说明

    环境信息 python3 9 12 IDE为 xff1a vscode 源码 书中源码注意点 xff1a send函数中的if recv len lt 4096需要调整为if recv len lt 2 xff1a 该出的recv len值
  • 【Python黑帽子】proxy.py脚本

    span class token comment coding 61 utf 8 span span class token keyword import span sys span class token keyword import s
  • 【Jmeter】跨线程组共享数据

    背景 在性能测试中 xff0c 经常会遇见使用多线程组的情况 xff0c 例如用户登陆成功后 xff0c 对某个查询接口使用500个线程来进行压测 xff0c 这个时候就需要使用多线程组 设计说明 首先 xff0c 需要使用setUp Th
  • 【playwright】使用pytest-playwright执行用例时频繁打开浏览器

    背景说明 安装pytest playwright之后 xff0c 执行多个用例频繁打开浏览器 xff0c 而且无法给对应的fixture的scope设置为session 原因说明 pytest playwright定义了fixture的sc
  • (转)注册JNI函数的两种方式

    原文地址 http blog csdn net wwj 748 article details 52347341 前言 前面介绍过如何实现在Android Studio中制作我们自己的so库 xff0c 相信大家看过之后基本清楚如何在And
  • 【playwright】使用playwright实现拖动功能

    思路说明 使用locator定位到要拖动滑块元素 xff0c 如元素名叫ele 获取元素ele的bounding box含4分属性值 xff1a x xff0c y xff0c width xff0c height 把鼠标移动到元素ele的
  • 【playwright】pytest-playwright与allure结合,生成报告带有图片和录屏

    依赖的环境 需要安装allure命令行工具以及allure pytest插件 pytest playwright需要升级0 3 0版本 xff0c 改版本支持如下参数 xff1a Playwright browser 61 chromium
  • 【性能测试】缓慢的磁盘问题分析套路

    该文基于 性能之巅 xff1a 洞悉系统 企业与云计算 的1 9 1 缓慢的磁盘章节调整而来 用户问题 Scott 是一家中型公司里的系统管理员 数据库团队报告了一个支持ticket xff08 工单 xff09 xff0c 抱怨他们有一台