![iostat 需要很长时间才能返回](https://linux22.com/image/649870/iostat%20%E9%9C%80%E8%A6%81%E5%BE%88%E9%95%BF%E6%97%B6%E9%97%B4%E6%89%8D%E8%83%BD%E8%BF%94%E5%9B%9E.png)
我有一台带有大量 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 工具包,也许你会在那里找到一些现成的、更合适的东西。
一旦确定了卡住的系统调用,您将能够围绕它进行更多调查。