macos - 高写入 I/O "Pulsing",带有 dtrace 错误

标签 macos dtrace

我们正在经历大约每 10 秒写入磁盘的“脉冲”写入(从 1 次写入/秒脉冲增加到 142+ 次写入/秒)。

查看此示例图片: https://discussions.apple.com/servlet/JiveServlet/showImage/2-22394173-269851/Screen+Shot+2013-07-03+at+13.22.28.png

我们深入研究了这些“脉冲式”写入,发现它们与来自 IOTOP 的这些错误发生的时间完全相同:

dtrace: error on enabled probe ID 5 (ID 992: io:mach_kernel:buf_strategy:start): illegal operation in action #3 at DIF offset 0

只有当上述错误出现在 IOTOP 中时,“脉冲”才会发生。

注意:我们正在为两个驱动器运行 Apple RAID 软件镜像。

如有任何建议、帮助和提示,我们将不胜感激。提前致谢。

最佳答案

您看到的脉冲 I/O 模式是应用程序的特征,其中许多/大多数文件系统写入是异步的 - 这是因为文件系统将批处理写入,因此它可以同时执行许多操作以避免执行一个磁盘寻找每写。我能想到的最常见的例子是数据库写入数据——除了数据库的预写日志外,所有内容通常都是异步写入的;其他事务访问模式往往是相似的,因为如果一些异步写入在崩溃中丢失,它们有一个预写日志来恢复。这是一种常见的访问模式,不一定是问题,但是当您的磁盘高度碎片化并且文件系统无法批量写出所有内容时,它可能会成为问题(导致多次搜索,就像它试图避免的那样) .

您看到的 DTrace/iotop 错误意味着 DTrace 实现本身或 iotop DTrace 脚本中存在错误。查看 iotop 的源代码(在 OS X 上的 /usr/bin/iotop 中),有三个 io:::start 回调这可能是罪魁祸首。对于某些类型的 I/O,脚本中可能存在某种空指针访问,但根据脚本和 io:::start 探测器采用的参数,这看起来不太可能。也许最好通过向 Apple 报告错误来解决这个问题。

关于macos - 高写入 I/O "Pulsing",带有 dtrace 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17448688/

相关文章:

android - 当两台机器的ip不断变化时,它们如何相互检测?

ruby-on-rails - 无法连接 postgres 服务器

java - 如何跟踪 "dtrace style"中的java应用程序?

cocoa - 如何从 DTrace 脚本打印 NSString

python - 将数据从python程序打印到mac上的终端

macos - cocoa 脚本: Use special string types like raw data

perl - 我可以在 OS X 10.5 上使用 dtrace 来确定我的哪个 perl 子程序导致的内存分配最多吗?

Java方法直接调用与单元素循环调用

macos - dtruss 在 OS X 10.11 上的 ps 上失败

macos - vagrant-coreos 图像在重启时在 OS X 的 virtualbox 4.3.2 中删除共享文件夹