进程阻塞了哪些调用?
On what call(s) the process is blocking?
我有一个程序应该 CPU 绑定,但它的使用率远低于 100% CPU,并且没有尽可能快地消耗输入。这意味着我的进程在某处阻塞或休眠。
如何找到最长时间阻塞我进程的调用?是否有工具或调试程序可以测量每次阻塞系统调用时进程休眠的时间?
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
[...]
我有一个程序应该 CPU 绑定,但它的使用率远低于 100% CPU,并且没有尽可能快地消耗输入。这意味着我的进程在某处阻塞或休眠。
如何找到最长时间阻塞我进程的调用?是否有工具或调试程序可以测量每次阻塞系统调用时进程休眠的时间?
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
[...]