iostat 需要很长时间才能返回

iostat 需要很长时间才能返回

我有一台带有大量 SAN 磁盘的 Solaris 10 服务器(所有路径上接近 1000 个)。 iostat -En需要将近 5 分钟才能返回。有没有办法找出导致延迟的原因?truss 帮不上什么忙。

答案1

dtrace 绝对是您正在寻找的工具。您可以使用相对简单的脚本来找出哪个系统调用最耗时。

像这样:

#!/usr/sbin/dtrace -s

syscall:::entry
/execname == "iostat"/
{
    self->ts = vtimestamp;
}

syscall:::return
/self->ts/
{
    @[probefunc] = sum(vtimestamp - self->ts);
    @["- all syscalls -"] = sum(vtimestamp - self->ts);
    self->ts = 0;
}

profile:::tick-1sec
/i++ >= 59/
{
    exit(0);
}

另外,您可以使用DTrace 工具包,也许你会在那里找到一些现成的、更合适的东西。

一旦确定了卡住的系统调用,您将能够围绕它进行更多调查。

相关内容