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_rt{6}sda0.94.20.00%0.017.9{6}深发展0.44.00.00%0.026.1{6}dm-00.04.00.00%0.013.5{6}dm-10.84.00.00%0.016.0...wr_swr_avkbwr_mb_swr_mrgwr_cncwr_rt...99.76.20.635%3..723.7...14.515.80.275%0.59.2...1.04.00.00%0.02.3....117.74.00.50%4.135.1...忙in_prgio_sqtime少许...6%0One hundred..623.3.0.4...4%014.98.60.6...0%01.11.51.2...5%0118.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,2,5,6]+δ[field9])-δ[field10]/δ[field1,2,5,6]参见
少许
有关详细信息和注意事项。
少许
平均使用时间;也就是说,在请求在队列中等待结束后,物理设备处理请求所经过的时间。这是读写的平均水平。它是根据排队理论的利用率公式U = SX计算的,对s求解。这意味着利用率除以吞吐量得到服务时间:
δ[field10]/(δ[field1,2,5,6])但是请注意,可能会有一些内核错误导致字段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.00%0.00.008: 50:20sda0.44.00.00%0.015.508: 50:30sda2.14.40.00%0.021.108: 50:40sda2.44.00.00%0.015.408: 50:50sda0.14.00.00%0.033.0wr_swr_avkbwr_mb_swr_mrgwr_cncwr_rt7.725.50.284%0.00.3.49.66.80.3.41%2.428.8210.15.61.128%7.425.2297.15.41.626%11.428.3.11.911.70.166%0.24.9忙in_prgio_sqtime少许1%07.70.10.26%050.028.10.712%0212.224.80.416%0299.527.80.41%012.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点24070。15.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/diskstats由diskstats_show ()
函数在内核源文件中块/ genhd.c.
这里有一个样品/proc/diskstats在最近的内核上。
81sda1426243338620563.01887021352142
本例中的字段如下所示。前三个字段分别是主、次设备号(8,1)和设备名(sda1)。其后是11个统计领域:
已完成的读取数。这是底层磁盘执行的物理读操作的数量,而不是应用程序从块设备执行的读操作的数量。这意味着已经成功地完成了对磁盘的426次实际读取/dev/sda1驻留。读取直到完成才被计算。
合并的读数,因为它们是相邻的。在样本中,有243个读取被合并。这意味着/dev/sda1实际接收了869个逻辑读,但只向底层物理设备发送了426个物理读。
读取成功的扇区数。对磁盘的426次物理读取读取了3386个扇区。扇区为512字节,因此总共读取了大约1.65MB/dev/sda1.
读取所用的毫秒数。这只计算已完成的读取,不计算正在进行的读取。它计算从请求被放入队列到请求完成所花费的时间,而不是底层磁盘为请求服务所花费的时间。也就是说,它度量应用程序看到的总响应时间,而不是磁盘响应时间。
字段1同样如此,但用于写入。
字段2同样如此,但用于写入。
字段3同样如此,但用于写入。
字段4同样如此,但用于写入。
当前正在进行的I/ o数量,也就是说,它们已由队列调度器调度并分发到磁盘(提交到底层磁盘的队列),但尚未完成。某些内核中的bug有时会导致这个数字(即字段10和11)出错。
花费在I/ o上的总毫秒数。这是不应用程序看到的总响应时间;它是至少一个I/O正在进行的总时间。如果一个I/O在时间100发出,另一个I/O在时间101到达,并且它们都在102完成,那么这个字段将增加2,而不是3。
该字段用于统计所有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。要启用调试并将所有输出捕获到一个文件,运行如下工具:
PTDEBUG=1pt-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的其他免费开源软件。雷竞技下载官网
版权、许可和保证¶
本节目版权归2011-2021 Percona LLC和/或其附属公司所雷竞技下载官网有,2010-2011 Baron Schwartz。
本程序按“现状”提供,不作任何明示或默示保证,包括但不限于对适销性和适合某一特定用途的默示保证。
本程序是免费软件;您可以根据由自由软件基金会发布的GNU通用公共许可证第2版的条款重新发布它和/或修改它;或者Perl艺术许可。在UNIX和类似的系统上,您可以发出' man perlgpl '或' man perlartistic '来读取这些许可证。
您应该已随本程序收到一份GNU通用公共许可证的副本;如果没有,请写信给自由软件基金会,59 Temple Place, Suite 330, Boston, MA 02111-1307 USA。
版本¶
pt-diskstats3.5.2