这是 pt-diskstatsp 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
pt-diskstats - 用于 GNU/Linux 的交互式 I/O 监控工具。
概要
用法:pt-diskstats [选项] [文件]
pt-diskstats 打印 GNU/Linux 的磁盘 I/O 统计信息。 它有点类似于iostat,
但它是互动的,更详细。 它可以分析从另一个
机。
风险
Percona Toolkit 是成熟的,在现实世界中得到验证,并经过良好测试,但所有数据库
工具会给系统和数据库服务器带来风险。 在使用这个工具之前,
请:
· 阅读工具的文档
· 查看工具已知的“BUGS”
· 在非生产服务器上测试该工具
· 备份您的生产服务器并验证备份
商品描述
pt-diskstats 工具类似于 iostat,但有一些优点。 它打印阅读和
单独写统计,列数多。 它是菜单驱动的和交互式的,具有
聚合数据的几种不同方式。 它与 pt-stalk 工具很好地集成在一起。
默认情况下,它也会做“正确的事情”,例如隐藏空闲的磁盘。 这些
属性使其非常方便快速深入了解 I/O 性能和
检查磁盘行为。
该程序在两种模式下工作。 默认是收集样本 /proc/diskstats 和
每隔一段时间打印出格式化的统计信息。 另一种模式是处理一个文件
包含保存的样本 /proc/diskstats; 后面有一个 shell 脚本
显示如何收集此类文件的文档。
在这两种情况下,该工具都是通过按键交互控制的,因此您可以重新显示
并灵活轻松地对数据进行切片。 它永远循环,直到你用“q”退出
钥匙。 如果您按“?” 键,您将调出交互式帮助菜单,显示
哪些键控制程序。
当程序收集样本时 /proc/diskstats 并刷新它的显示,它
每次刷新时打印有关最新样本的信息。 运行时
在保存样本的文件上,每次更改一个文件时,它都会重绘整个文件的内容
选项。
该程序不会打印有关系统上每个块设备的信息。 它隐藏
它从未观察到有任何活动的设备。 您可以启用和禁用此功能
按“i”键。
OUTPUT
在本文档的其余部分,我们将尝试澄清块之间的区别
设备(例如 /dev/sda1),内核通过
文件系统,而不是块设备下面的(通常)物理设备,它可以
可以是磁盘、RAID 控制器等。 我们有时会提到逻辑 I/O
发生在块设备上的操作与在其上执行的物理 I/O
底层设备。 当我们提到队列时,我们指的是队列
与块设备相关联,它保存请求直到它们被发送到
物理设备。
程序的输出类似于以下示例,这对于本手册来说太宽泛了
页面,因此我们将其格式化为几个带有换行符的示例:
#ts 设备 rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt
{6} sda 0.9 4.2 0.0 0% 0.0 17.9
{6} 深海开发银行 0.4 4.0 0.0 0% 0.0 26.1
{6} dm-0 0.0 4.0 0.0 0% 0.0 13.5
{6} dm-1 0.8 4.0 0.0 0% 0.0 16.0
... wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt
... 99.7 6.2 0.6 35% 3.7 23.7
... 14.5 15.8 0.2 75% 0.5 9.2
... 1.0 4.0 0.0 0% 0.0 2.3
... 117.7 4.0 0.5 0% 4.1 35.1
...忙 in_prg io_s qtime stime
... 6% 0 100.6 23.3 0.4
... 4% 0 14.9 8.6 0.6
... 0% 0 1.1 1.5 1.2
... 5% 0 118.5 34.5 0.4
各列如下:
#ts 此列的内容因工具的聚合模式而异。 默认情况下
模式,当每一行包含有关单个磁盘的信息但可能聚合时
在该磁盘的多个样本中,此列显示了
被包含在输出行中,在{花括号}中。 在所示的示例中,每个
输出行聚合了 {10} 个样本 /proc/diskstats.
在“全部”分组模式下,此列显示相对于时间的时间戳偏移
该工具开始聚合或打印前几行的时间戳,具体取决于
在模式上。 输出的解释可能会令人困惑,但是当
您会看到屏幕上定期出现线条。
同样,在“样本”分组模式下,数字表示总时间跨度
分组到每个样本中。
如果您指定“--show-timestamps”,则该字段会显示时间戳
取样; 如果一行输出中存在多个时间戳,
然后使用第一个时间戳。
设备
设备名称。 如果有多个设备,则改为设备数量
聚合到行中显示,在{花括号}中。
RD_S
每秒平均读取次数。 这是 I/O 请求的数量
发送到底层设备。 这通常小于
应用程序发出的逻辑 IO 请求。 更多请求可能已排队等待
块设备,但其中一些通常在发送到磁盘之前被合并。
该字段是根据以下内容计算的 /proc/diskstats 如下。 见“内核
DOCUMENTATION”下面的字段编号的含义:
delta[field1] / delta[时间]
rd_avkb
读取的平均大小,以千字节为单位。 该字段的计算方式如下:
2 * 增量[field3] / 增量[field1]
rd_mb_s
每秒读取的平均兆字节数。 计算如下:
2 * delta[field3] / delta[时间]
rd_mrg
在队列调度器中合并在一起的读取请求的百分比
在发送到物理设备之前。 该字段的计算方式如下:
100 * 增量[字段2] / (增量[字段2] + 增量[字段1])
数控加工中心
根据利特尔定律计算的读取操作的平均并发性。 这是
块设备上的端到端并发,而不是底层磁盘的并发。
它包括在队列中花费的时间。 该字段的计算方式如下:
delta[field4] / delta[time] / 1000 / 设备组
rd_rt
读取操作的平均响应时间,以毫秒为单位。 这就是结局-
端响应时间,包括在队列中花费的时间。 这是响应时间
发出 I/O 请求的应用程序看到的不是物理磁盘的响应时间
块设备的底层。 计算如下:
增量[字段4] / (增量[字段1] + 增量[字段2])
wr_s、wr_avkb、wr_mb_s、wr_mrg、wr_cnc、wr_rt
这些列显示写入活动,并且它们与读取的相应列匹配
活性。
忙碌
设备至少有一个请求正在进行的挂钟时间的分数;
这就是 iostat 所说的 %util,实际上它是利用率,这取决于你如何
定义利用率,但这有时在常用语中是模棱两可的。 它也可能
称为停留时间; 至少一个请求驻留的时间
在系统中。 计算如下:
100 * 增量[field10] / (1000 * 增量[时间])
该字段不能超过 100%,除非存在舍入误差,但这是一个常见的
错误地认为一直忙碌的设备已饱和。 像这样的设备
因为RAID卷应该支持大于1的并发,固态硬盘可以
支持非常高的并发。 并发可以无限增长,并且是一个更
设备实际负载情况的可靠指标。
in_prg
正在进行的请求数。 不同于读写
并发数,这是从可靠数字生成的平均值,这
number 是一个瞬时样本,您可以看到它可能代表
请求,而不是真正的长期平均值。 如果这个数字很大
本质上意味着设备负载很重。 计算如下:
field9
ios_s
物理设备的平均吞吐量,以每秒 I/O 操作数 (IOPS) 为单位。
此列显示底层设备正在处理的总 IOPS。 它是总和
rd_s 和 wr_s。
时间
平均排队时间; 也就是说,请求在设备调度程序队列中花费的时间
在发送到物理设备之前。 这是读取和写入的平均值。
它以稍微复杂的方式计算:
应用程序,减去平均服务时间(请参阅下一栏的说明)。
这是从响应时间的排队理论公式推导出来的,R = W + S:
响应时间=排队时间+服务时间。 这对W解决了,当然,给W
= R - S。计算如下:
增量[字段11] / (增量[字段1, 2, 5, 6] + 增量[字段9])
- 增量[字段10] / 增量[字段1, 2, 5, 6]
有关更多详细信息和注意事项,请参阅“stime”的说明。
STIME
平均服务时间; 也就是说,物理设备经过的时间
在请求完成在队列中等待之后处理请求。 这是一
平均超过读取和写入。 它是根据排队论利用计算的
公式,U = SX,求解 S。这意味着利用率除以吞吐量
提供服务时间:
增量[字段10] / (增量[字段1, 2, 5, 6])
但是请注意,可能存在一些内核错误导致字段 9
/proc/diskstats 变为负数,这可能导致字段 10 错误,因此
使服务时间计算不完全可信。
请注意,在上述公式中,我们非常具体地使用了利用率。 这是一个持续时间,
不是百分比。
您可以比较 stime 和 qtime 列以查看读取的响应时间
并且写入花费在队列中或物理设备上。 然而,你看不到
读和写的区别。 更改块设备调度程序
算法可能会大大改善排队时间。 默认算法 cfq 非常糟糕
用于服务器,并且只能用于执行任务的笔记本电脑和工作站
例如使用电子表格和上网冲浪。
如果您习惯使用iostat,您可能想知道在哪里可以找到相同的信息
在 pt-diskstats 中。 以下是同一台机器上两种工具的两个输出示例
同时,对于 / dev / sda上的, 包裹以适合:
#ts dev rd_s rd_avkb rd_mb_s rd_mrg rd_cnc rd_rt
08:50:10 sda 0.0 0.0 0.0 0% 0.0 0.0
08:50:20 sda 0.4 4.0 0.0 0% 0.0 15.5
08:50:30 sda 2.1 4.4 0.0 0% 0.0 21.1
08:50:40 sda 2.4 4.0 0.0 0% 0.0 15.4
08:50:50 sda 0.1 4.0 0.0 0% 0.0 33.0
wr_s wr_avkb wr_mb_s wr_mrg wr_cnc wr_rt
7.7 25.5 0.2 84% 0.0 0.3
49.6 6.8 0.3 41% 2.4 28.8
210.1 5.6 1.1 28% 7.4 25.2
297.1 5.4 1.6 26% 11.4 28.3
11.9 11.7 0.1 66% 0.2 4.9
忙 in_prg io_s qtime stime
1% 0 7.7 0.1 0.2
6% 0 50.0 28.1 0.7
12% 0 212.2 24.8 0.4
16% 0 299.5 27.8 0.4
1% 0 12.0 4.7 0.3
开发 rrqm/s wrqm/sr/sw/s rMB/s wMB/s
08:50:10 标准时间 0.00 41.40 0.00 7.70 0.00 0.19
08:50:20 标准时间 0.00 34.70 0.40 49.60 0.00 0.33
08:50:30 标准时间 0.00 83.30 2.10 210.10 0.01 1.15
08:50:40 标准时间 0.00 105.10 2.40 297.90 0.01 1.58
08:50:50 标准时间 0.00 22.50 0.10 11.10 0.00 0.13
avgrq-sz avgqu-sz 等待 svctm %util
51.01 0.02 2.04 1.25 0.96
13.55 2.44 48.76 1.16 5.79
11.15 7.45 35.10 0.55 11.76
10.81 11.40 37.96 0.53 15.97
24.07 0.17 15.60 0.87 0.97
列之间的对应关系不是一一对应的。 特别是:
rrqm/s, wrqm/s
iostat 中的这些列被 pt-diskstats 中的 rd_mrg 和 wr_mrg 替换。
avgrq-sz
该列在iostat中的sectors中,是读和写的结合。 这
pt-diskstats 输出将它们分开并以 kB 显示。 你可以得出
它通过 pt-diskstats 中 rd_avkb 和 wr_avkb 的加权平均值,然后乘以
2 获取扇区(每个扇区为 512 字节)。
平均曲率
此列真正代表块设备调度程序的并发性。 pt-
diskstats 输出分别显示读取和写入的并发性:rd_cnc 和 wr_cnc。
等待
此列是从请求开始到结束的平均响应时间
块设备,包括排队时间和服务时间,pt-中没有显示
磁盘统计信息。 相反,pt-diskstats 显示磁盘级别的单个响应时间
读取和写入(rd_rt 和 wr_rt),以及排队时间与服务时间
聚合读取和写入。
服务中心
此列是磁盘的平均服务时间,在pt-中显示为stime
磁盘统计信息。
% 实用程序
此列在 pt-diskstats 中称为繁忙。 利用率通常定义为
至少有一个活动请求的部分时间,而不是作为
百分比,这就是我们选择避免使用这个令人困惑的术语的原因。
收集 数据
为该工具收集数据样本很简单。 文件应该有这个
格式,在每个统计样本之前都有一个时间戳行:
TS
<内容 /proc/diskstats>
TS
<内容 /proc/diskstats>
……等等
您可以简单地使用带有“--save-samples”的 pt-diskstats 来为您收集这些数据。 如果
您希望捕获样本作为其他工具的一部分,并使用 pt-diskstats 进行分析
它们,您可以包含一段 shell 脚本,例如:
间隔=1
虽然是真的; 做
sleep=$(date +%s.%N | awk "{print $INTERVAL - (\$1 % $INTERVAL)}")
睡觉 $sleep
日期 +"TS %s.%N %F %T" >> diskstats-samples.txt
猫 /proc/diskstats >> diskstats-samples.txt
完成
仁 文档
本文档是对官方文档的补充
<http://www.kernel.org/doc/Documentation/iostats.txt> 关于内容 /proc/diskstats.
对于不熟悉的人来说,该文档有时难以理解
使用 Linux 内核内部结构。 的内容 /proc/diskstats 由
内核源文件中的“diskstats_show()”函数 块/genhd.c.
这是一个示例 /proc/diskstats 在最近的内核上。
8 1 SDA1 426 243 3386 2056 3 0 18 87 0 2135 2142
本示例中的字段如下。 前三个字段是major和minor
设备编号 (8, 1) 和设备名称 (sda1)。 紧随其后的是 11 个领域
统计数据:
1.读取完成的次数。 这是物理读取的数量
底层磁盘,而不是应用程序从块设备进行的读取次数。
这意味着对磁盘的 426 次实际读取已成功完成
/ dev / sda1 居住。 读取数在完成之前不会被计算在内。
2. 因为相邻而合并的reads的数量。 在样本中,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 数,即它们已被队列调度
调度程序并发布到磁盘(提交到底层磁盘的队列),但不
尚未完成。 某些内核中存在导致此数字的错误,因此字段
10 和 11,有时是错误的。
10. 花费在 I/O 上的总毫秒数。 这是 而不去 总反应
应用程序看到的时间; 它是至少在此期间的总时间
一个 I/O 正在进行中。 如果一个 I/O 在时间 100 发出,另一个在 101 进入,
并且它们都在 102 处完成,则该字段增加 2,而不是 3。
11. 该字段计算所有 I/O 的总响应时间。 与字段 10 相比,它
当两个 I/O 重叠时计数加倍。 在我们之前的示例中,该字段将
增加 3,而不是 2。
配置
此工具接受额外的命令行参数。 参考“概要”和用法
详细信息。
--列-正则表达式
类型:字符串; 默认: 。
打印与此 Perl 正则表达式匹配的列。
--配置
类型:数组
阅读这个逗号分隔的配置文件列表; 如果指定,这必须是第一个
命令行选项。
--devices-正则表达式
类型:字符串
打印与此 Perl 正则表达式匹配的设备。
- 通过...分组
类型:字符串; 默认:全部
分组模式:磁盘、样本或全部。 在 磁盘 模式,每一行输出显示一个磁盘
设备,使用自工具启动以来计算的统计数据。 在 样品 模式,每个
输出行显示了一个统计样本,所有磁盘一起平均。 在
所有 模式,每一行输出显示一个样本和一个磁盘设备。
--标题
类型:哈希; 默认:组,滚动
如果存在“group”,每个样本将被一个空行分隔,除非
样本只有一行。 如果存在“滚动”,该工具会将标题打印为
通常根据需要防止它们滚出视图。 请注意,您可以按
空格键,或回车键,随意重印标题。
- 帮帮我
显示帮助并退出。
- 间隔
类型: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 样本模式下,每组包括 N 秒的样本。
--保存样本
类型:字符串
用于保存 diskstats 样本的文件; 这些可以用于以后的分析。
--显示非活动状态
显示非活动设备。
--显示时间戳
在“#ts”列中显示“HH:MM:SS”时间戳。 如果有多个时间戳
聚合成一行,显示第一个时间戳。
- 版
显示版本并退出。
--[无]版本检查
默认:是
检查 Percona Toolkit、MySQL 和其他程序的最新版本。
这是一个标准的“自动检查更新”功能,还有两个额外的
特征。 首先,该工具在本地系统中检查其他程序的版本
除了它自己的版本。 例如,它检查每个 MySQL 服务器的版本
它连接到 Perl 和 Perl 模块 DBD::mysql。 其次,它检查并警告
关于存在已知问题的版本。 例如,MySQL 5.5.25 有一个严重的错误并且
被重新发布为 5.5.25a。
在工具正常输出之前,任何更新或已知问题都会打印到 STDOUT。
此功能不应干扰工具的正常操作。
欲了解更多信息,请访问.
环境
环境变量“PTDEBUG”启用对 STDERR 的详细调试输出。 启用
调试并将所有输出捕获到文件中,运行该工具,如:
PTDEBUG=1 pt-diskstats ... > 文件 2>&1
请注意:调试输出量很大,可能会生成几兆字节的输出。
系统 参赛要件
此工具需要 Perl v5.8.0 或更新版本,并且 / proc中 文件系统,除非从
文件。
使用 onworks.net 服务在线使用 pt-diskstatsp
