跳到内容

pt-diskstats

名字

pt-diskstats一个交互式的I/O监控工具,适用于GNU/raybet雷竞技竞猜在线官网Linux。

剧情简介

使用

pt-diskstats选项文件

pt-diskstats打印GNU/Linux的磁盘I/O统计信息。它有点类似于iostat,但它是交互式的,而且更详细。它可以分析从另一台机器收集的样本。

风险

雷竞技下载官网Percona Toolkit是成熟的,在现实世界中得到了验证,并且经过了良好的测试,但所有数据库工具都可能对系统和数据库服务器构成风险。使用此工具前,请:

  • 阅读工具的文档

  • 检查工具已知的“bug”

  • 在非生产服务器上测试该工具

  • 备份您的生产服务器并验证备份

描述

pt-diskstatsTool类似于iostat,但有一些优点。它分别打印读写统计信息,并且有更多的列。它是菜单驱动和交互式的,有几种不同的方法来聚合数据。它与pt-stalk工具集成良好。它还在默认情况下做“正确的事情”,比如隐藏空闲的磁盘。这些属性使得快速深入I/O性能和检查磁盘行为非常方便。

这个程序有两种工作模式。默认为收集样本/proc/diskstats并每隔一段时间打印出格式化的统计数据。另一种模式是处理包含保存的样例的文件/proc/diskstats;本文档后面有一个shell脚本展示如何收集这样的文件。

在这两种情况下,该工具都是通过击键进行交互控制的,因此您可以灵活而轻松地重新显示和切片数据。它会一直循环,直到你按下' q '键退出。如果你按' ?'键,你将调出交互式帮助菜单,显示哪些键控制程序。

当程序正在收集样本时/proc/diskstats并且刷新它的显示,它每次刷新都会打印关于最新样本的信息。当它对保存的示例文件进行操作时,每次更改一个选项时,它都会重新绘制整个文件的内容。

该程序不会打印系统上每个块设备的信息。它会隐藏它从未观察到有任何活动的设备。您可以通过按' i '键启用和禁用此功能。

输出

在本文档的其余部分中,我们将试图阐明块设备(例如/dev/sda1)与块设备下面的物理设备(通常是磁盘、RAID控制器等)之间的区别。我们有时会提到发生在块设备上的逻辑I/O操作,而不是在底层设备上执行的物理I/O。当我们提到队列时,我们说的是与块设备相关联的队列,它保存请求,直到它们被发送到物理设备。

该程序的输出看起来像下面的示例,对于本手册页来说太宽了,所以我们将它格式化为几个带有换行符的示例:

#ts设备rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt6sda0.94.20.000.017.96深发展0.44.00.000.026.16dm-00.04.00.000.013.56dm-10.84.00.000.016.0...wr_swr_avkbwr_mb_swr_mrgwr_cncwr_rt...99.76.20.6353..723.7...14.515.80.2750.59.2...1.04.00.000.02.3....117.74.00.504.135.1...in_prgio_sqtime少许...60One hundred..623.3.0.4...4014.98.60.6...001.11.51.2...50118.534.50.4

各列如下:

# ts

该列的内容取决于工具的聚合模式。在默认模式下,当每一行包含关于单个磁盘的信息,但可能聚集了来自该磁盘的多个样本时,此列显示输出行中包含的样本数量,用{花括号}表示。在所示的示例中,输出的每一行聚合了{10}个样本/proc/diskstats

在“all”group-by模式中,这一列显示时间戳偏移量,相对于工具开始聚合的时间或打印前几行的时间戳,这取决于模式。输出可能难以解释,但当您看到这些行周期性地出现在屏幕上时,它是相当直观的。

类似地,在“样本”分组模式中,数字表示分组到每个样本中的总时间跨度。

如果你指定——show-timestamps,这个字段反而显示样本被取走的时间戳;如果单行输出中出现多个时间戳,则使用第一个时间戳。

设备

设备名称。如果有多个设备,则用{花括号}显示聚合到行的设备数量。

rd_s

平均每秒读取数。这是发送到底层设备的I/O请求的数量。这个数字通常小于应用程序发出的逻辑IO请求的数量。更多的请求可能已经排队到块设备,但其中一些请求通常在发送到磁盘之前被合并。

的内容计算该字段/proc/diskstats如下。字段编号的含义见下面的“KERNEL DOCUMENTATION”:

δfield1/δ时间

rd_avkb

读取的平均大小,单位为千字节。该字段的计算方法如下:

2δfield3/δfield1

rd_mb_s

每秒读取的平均兆字节数。计算公式如下:

2δfield3/δ时间

rd_mrg

在发送到物理设备之前在队列调度器中合并的读请求的百分比。该字段的计算方法如下:

One hundred.δfield2/δfield2+δfield1])

rd_cnc

根据利特尔定律计算的读操作的平均并发性。这是块设备上的端到端并发,而不是底层磁盘的并发。它包括在队列中花费的时间。该字段的计算方法如下:

δfield4/δ时间/1000/devices-in-group

rd_rt

读取操作的平均响应时间,以毫秒为单位。这是端到端响应时间,包括在队列中花费的时间。它是发出I/O请求的应用程序看到的响应时间,而不是块设备底层物理磁盘的响应时间。计算公式如下:

δfield4/δfield1+δfield2])

Wr_s, wr_avkb, wr_mb_s, wr_mrg, wr_cnc, wr_rt

这些列显示写活动,它们与读活动的相应列相匹配。

设备至少有一个正在进行的请求占挂钟时间的比例;这就是iostat所称的%util,实际上它是利用率,这取决于您如何定义利用率,但在通常的说法中,这有时是不明确的。也可以称为停留时间;至少一个请求驻留在系统中的时间。计算公式如下:

One hundred.δfield10/1000δ时间])

除非有舍入误差,否则该字段不能超过100%,但认为一直处于繁忙状态的设备是饱和的是一个常见的错误。像RAID卷这样的设备应该支持高于1的并发性,而固态硬盘可以支持很高的并发性。并发性可以无限制地增长,并且是设备实际负载情况的一个更可靠的指示器。

in_prg

正在进行的请求的数量。读写并发数是由可靠数字生成的平均值,与之不同的是,这个数字是一个瞬时样本,您可以看到它可能代表请求的峰值,而不是真正的长期平均值。如果这个数字很大,本质上意味着设备负载过重。计算公式如下:

field9

ios_s

物理设备的平均吞吐量,单位为IOPS (I /O operations per second)。此列显示底层设备正在处理的总IOPS。它是rd_s和wr_s的和。

qtime

平均排队时间;也就是说,请求在发送到物理设备之前在设备调度器队列中花费的时间。这是读写的平均水平。

它的计算方式略复杂:应用程序看到的平均响应时间减去平均服务时间(请参阅下一列的描述)。这是由排队理论的响应时间公式R = W + S:响应时间=排队时间+服务时间。这是W的解,当然,得到W = R - s,计算如下:

δfield11/δfield1,256+δfield9])-δfield10/δfield1,256

参见少许有关详细信息和注意事项。

少许

平均使用时间;也就是说,在请求在队列中等待结束后,物理设备处理请求所经过的时间。这是读写的平均水平。它是根据排队理论的利用率公式U = SX计算的,对s求解。这意味着利用率除以吞吐量得到服务时间:

δfield10/δfield1,256])

但是请注意,可能会有一些内核错误导致字段9在/proc/diskstats变为负值,这可能导致字段10是错误的,从而使服务时间计算不完全可信。

注意,在上面的公式中,我们非常具体地使用了利用率。它是一个持续时间,而不是一个百分比。

您可以比较stime和qtime列,以查看读写的响应时间是花在队列上还是花在物理设备上。但是,您无法看到读和写之间的区别。改变块设备调度器算法可以大大改善队列时间。默认算法cfq对服务器非常不利,只能在执行电子表格和上网等任务的笔记本电脑和工作站上使用。

如果您习惯使用iostat,您可能想知道在哪里可以找到相同的信息pt-diskstats.下面是这两个工具在同一台机器上同时输出的两个示例sda,包装适合:

#ts dev rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt08: 50:10sda0.00.00.000.00.008: 50:20sda0.44.00.000.015.508: 50:30sda2.14.40.000.021.108: 50:40sda2.44.00.000.015.408: 50:50sda0.14.00.000.033.0wr_swr_avkbwr_mb_swr_mrgwr_cncwr_rt7.725.50.2840.00.3.49.66.80.3.412.428.8210.15.61.1287.425.2297.15.41.62611.428.3.11.911.70.1660.24.9in_prgio_sqtime少许107.70.10.26050.028.10.7120212.224.80.4160299.527.80.41012.04.70.3.Devrrqm /秒wrqm /秒r / sw / s元/秒wMB /秒08: 50:10sda0〇〇41.400〇〇720〇〇0.1908: 50:20sda0〇〇3420.4049.600〇〇0.3308: 50:30sda0〇〇83.302.10210.100. 011酒精含量08: 50:40sda0〇〇105.102.40297.900. 011算下来08: 50:50sda0〇〇22500.1011.100〇〇013。avgrq-szavgqu-sz等待svctm%跑龙套51. 010022.04点1二十五分0.96点13552无误48.761165.7911酒精含量7。4535.1005511.7610结果11.4037.96点05315.97点2407015.600.87点0.97点

列之间的对应关系不是一对一的。特别是:

rrqm / s, wrqm / s

中的rd_mrg和wr_mrg替换iostat中的这些列pt-diskstats

avgrq-sz

该列在iostat中的扇区中,是读和写的组合。的pt-diskstatsoutput将它们分开并以kB为单位显示。你可以通过rd_avkb和wr_avkb的加权平均来推导它pt-diskstats,然后乘以2得到扇区(每个扇区为512字节)。

avgqu-sz

此列实际表示块设备调度器上的并发性。的pt-diskstats输出分别显示了读写的并发性:rd_cnc和wr_cnc。

等待

此列是对块设备的请求从开始到结束的平均响应时间,包括队列时间和服务时间,在中没有显示pt-diskstats.相反,pt-diskstats显示磁盘级别上读写(rd_rt和wr_rt)的单个响应时间,以及总体上读写的队列时间和服务时间。

svctm

这一列是磁盘的平均服务时间,在中显示为stimept-diskstats

%跑龙套

这一列称为busy inpt-diskstats.利用率通常定义为至少有一个活动请求的时间部分,而不是百分比,这就是为什么我们选择避免这个令人困惑的术语。

收集数据

为该工具收集数据示例非常简单。文件应该有这样的格式,在每个统计样本之前有一个时间戳行:

TS<时间戳> <内容/proc/diskstats > TS<时间戳> <内容/proc/diskstats >…等等

你可以简单地使用pt-diskstats——save-samples为你收集这些数据。如果您希望捕获样例作为一些其他工具的一部分,并使用pt-diskstats为了分析它们,你可以包含一个shell脚本片段,如下所示:

时间间隔1真正的睡眠$ (日期+ % s % N|awk“{打印美元区间- (\$ 1%美元区间)}”睡眠美元的睡眠日期+“TS % s。%N %F %T">>diskstats-samples.txt/proc/diskstats>>diskstats-samples.txt完成

内核文件

本文档补充官方文件关于/proc/diskstats.对于那些不熟悉Linux内核内部结构的人来说,这些文档有时很难理解。的内容/proc/diskstatsdiskstats_show ()函数在内核源文件中块/ genhd.c

这里有一个样品/proc/diskstats在最近的内核上。

81sda1426243338620563.01887021352142

本例中的字段如下所示。前三个字段分别是主、次设备号(8,1)和设备名(sda1)。其后是11个统计领域:

  1. 已完成的读取数。这是底层磁盘执行的物理读操作的数量,而不是应用程序从块设备执行的读操作的数量。这意味着已经成功地完成了对磁盘的426次实际读取/dev/sda1驻留。读取直到完成才被计算。

  2. 合并的读数,因为它们是相邻的。在样本中,有243个读取被合并。这意味着/dev/sda1实际接收了869个逻辑读,但只向底层物理设备发送了426个物理读。

  3. 读取成功的扇区数。对磁盘的426次物理读取读取了3386个扇区。扇区为512字节,因此总共读取了大约1.65MB/dev/sda1

  4. 读取所用的毫秒数。这只计算已完成的读取,不计算正在进行的读取。它计算从请求被放入队列到请求完成所花费的时间,而不是底层磁盘为请求服务所花费的时间。也就是说,它度量应用程序看到的总响应时间,而不是磁盘响应时间。

  5. 字段1同样如此,但用于写入。

  6. 字段2同样如此,但用于写入。

  7. 字段3同样如此,但用于写入。

  8. 字段4同样如此,但用于写入。

  9. 当前正在进行的I/ o数量,也就是说,它们已由队列调度器调度并分发到磁盘(提交到底层磁盘的队列),但尚未完成。某些内核中的bug有时会导致这个数字(即字段10和11)出错。

  10. 花费在I/ o上的总毫秒数。这是应用程序看到的总响应时间;它是至少一个I/O正在进行的总时间。如果一个I/O在时间100发出,另一个I/O在时间101到达,并且它们都在102完成,那么这个字段将增加2,而不是3。

  11. 该字段用于统计所有I/ o的总响应时间。与字段10相反,当两个I/ o重叠时,计数加倍。在前面的例子中,这个字段会增加3,而不是2。

选项

该工具接受额外的命令行参数。详细信息请参考“概要”和使用信息。

——columns-regex

类型:字符串;默认值:。

打印与此Perl正则表达式匹配的列。

——配置

类型:数组

读取以逗号分隔的配置文件列表;如果指定,则必须是命令行上的第一个选项。

——devices-regex

类型:字符串

打印与此Perl正则表达式匹配的设备。

——group by

类型:字符串;默认值:所有

分组方式:磁盘、样本或全部。在磁盘模式下,每行输出显示一个磁盘设备,其中包含自工具启动以来计算的统计信息。在样本模式下,每行输出显示一个统计数据示例,所有磁盘的平均值都在一起。在所有模式下,每行输出显示一个示例和一个磁盘设备。

——标题

类型:散列;默认值:滚动

如果集团存在时,每个样品将用空行隔开,除非样品只有一行。如果滚动存在时,该工具将根据需要经常打印标题,以防止它们滚动出视图。请注意,您可以按空格键或回车键随意重新打印标题。

——帮助

求救并离开。

——时间间隔

类型:int;默认值:1

在交互模式下,在打印到屏幕前等待N秒。此外,工具应该多久采样一次/proc/diskstats

该工具试图精确地在时钟时间的偶数间隔上收集统计信息。也就是说,如果您指定一个5秒的间隔,它将尝试在12:00:00、12:00:05等时间捕获样本;它不会在12:00:01,12:00:06等时间聚集。

在某些情况下,这可能会导致稍微奇怪的延迟,因为工具在打印第一组行之前会等待一个完整的周期。(与iostat和vmstat不同,pt-diskstats不以表示自计算机启动以来的平均值的行开始。)因此,该规则有一个例外,以避免非常长的延迟。假设您指定了一个10秒的间隔,但是在12:00:00.01启动工具。该工具可能会等到12:00:20才打印它的第一行输出,在中间的19.99秒内,它似乎什么也不做。

为了缓解这种情况,工具会等待到下一个偶数时间间隔进行收集,除非该时间间隔的剩余时间超过20%。这意味着工具永远不会等待超过120%的采样间隔来产生输出,例如,如果您在12:00:53启动工具,采样间隔为10秒,那么第一个采样将只有7秒长,而不是10秒长。

——迭代

类型:int

在交互模式下,采样N次后停止。默认情况下永远运行。

——采样时间

类型:int;默认值:1

在-group-by sample模式下,每组包含N秒的样本。

——save-samples

类型:字符串

保存diskstats样本的文件;这些可以用于以后的分析。

——show-inactive

显示非活动设备。

——show-timestamps

中显示' HH:MM:SS '时间戳# ts列。如果多个时间戳聚合到一行中,则显示第一个时间戳。

——版本

显示版本并退出。

——(没有)版本检查

默认值:是的

检查最新版本的Percona Toolkit、MySQL和其他程雷竞技下载官网序。

这是一个标准的“自动检查更新”功能,还有两个附加功能。首先,该工具检查自己的版本,以及以下软件的版本:操作系统、Percona监控和管理(PMM)、MySQL、Perl、MySQL Perl驱动程序(DBD:: MySQL)和Percona Toolkit。雷竞技下载官网raybet雷竞技竞猜在线官网其次,它检查并警告存在已知问题的版本。例如,MySQL 5.5.25有一个严重的错误,并重新发布为5.5.25a。

通过与Percona的Version Chec雷竞技下载官网k数据库服务器的安全连接来执行这些检查。服务器记录每个请求,包括软件版本号和所检查系统的唯一ID。该ID由Percona Toolkit安装脚本或第一次雷竞技下载官网调用Version Check数据库时生成。

在工具正常输出之前,任何更新或已知问题都打印到STDOUT。该特性不应干扰工具的正常操作。

更多信息,请访问https://www.雷竞技下载官网percona.com/doc/percona-toolkit/LATEST/version-check.html

环境

环境变量PTDEBUG打开详细调试输出到STDERR。要启用调试并将所有输出捕获到一个文件,运行如下工具:

PTDEBUG1pt-diskstats...>文件2>1

注意:调试输出是大量的,可能会产生几兆字节的输出。

注意

使用可能会暴露密码。启用调试时,所有命令行参数都显示在输出中。

系统需求

此工具需要Perl v5.8.0或更新版本和/ proc文件系统,除非是从文件中读取。

错误

有关已知错误的列表,请参见https://jira.雷竞技下载官网percona.com/projects/PT/issues

请在https://jira.雷竞技下载官网percona.com/projects/PT.在错误报告中包含以下信息:

  • 用于运行工具的完整命令行

  • 工具——版本

  • 所有涉及的服务器的MySQL版本

  • 工具的输出,包括STDERR

  • 输入文件(日志/转储/配置文件等)

如果可能,通过运行工具包含调试输出PTDEBUG;看到“环境”。

下载

访问http://www.雷竞技下载官网percona.com/software/percona-toolkit/下载最新版本的Percona Toolkit。雷竞技下载官网或者,从命令行获取最新版本:

wget雷竞技下载官网percona.com/get/percona-toolkit.tar.gz wget雷竞技下载官网percona.com/get/percona-toolkit.rpm wget雷竞技下载官网percona.com/get/percona-toolkit.deb

您还可以从最新版本中获得单独的工具:

wget雷竞技下载官网percona.com/get/TOOL

取代工具使用任何工具的名称。

作者

巴伦·施瓦茨,布莱恩·弗雷泽,丹尼尔·尼切特

关于perc雷竞技下载官网ona工具箱

该工具是Percona Toolkit的一雷竞技下载官网部分,是Percona开发的MySQL高级命令行工具的集合。雷竞技下载官网Percona Toolkit在2011年6月从两个项目中分叉出来:Maatkit和Aspersa。这些项目是由Baron Schwartz创建的,主要由他和Daniel Nichter开发。访问http://www.雷竞技下载官网percona.com/software/以了解Percona的其他免费开源软件。雷竞技下载官网

版本

pt-diskstats3.5.2

Baidu
map