O dtrace é definitivamente a ferramenta que você está procurando. você pode usar um script relativamente simples para descobrir qual é o syscall mais demorado.
Algo parecido com isto:
#!/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);
}
Além disso, você pode usar o DTrace Toolkit , pois poderá encontrar algo pronto para usar e mais apropriado.
Depois de determinar o styscall do stucking, você poderá fazer mais investigações sobre ele.