У меня есть сервер solaris 10 с большим количеством дисков SAN (близко к 1 000 через все пути). 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 Toolkit , может быть, вы что-то найдете готов к использованию и более подходящий.
Как только вы определите застрявший системный вызов, вы сможете провести дополнительные исследования вокруг него.