У меня есть сервер Solaris 10 с большим количеством дисков SAN (около 1000 по всем путям). iostat -En
на возврат уходит около 5 минут. Есть ли способ выяснить причину задержки? ферма не сильно помогла.
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, может быть, вы найдете там что-то готовое и более подходящее.
Как только вы определите застрявший системный вызов, вы сможете провести дополнительные исследования вокруг него.