我有一个应该与CPU绑定的程序,但是它使用的CPU远远少于100%,并且没有尽可能快地消耗输入.这意味着我的进程正在阻塞或在某处休眠.
如何找到大部分时间阻塞了我的流程的电话?是否有工具或调试过程可以测量该时间在每个阻塞的系统调用上睡眠多少时间?
解决方法:
strace是一个选项:
$strace -wc sleep 1
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
99.96 1.000146 1000146 1 nanosleep
0.01 0.000131 131 1 execve
0.01 0.000082 10 8 mmap
[...]