我的epoll_wait()消耗了太多的CPU,一个简单的strace显示:
strace -c -f -p 3655
Process 3655 attached with 5 threads
^CProcess 3655 detached
Process 3656 detached
Process 3657 detached
Process 3658 detached
Process 3659 detached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
64.43 32.228205 596819 54 epoll_wait
35.31 17.661939 17 1063312 195547 futex
0.26 0.131803 0 448140 gettimeofday
0.00 0.000090 3 27 write
0.00 0.000050 1 54 epoll_ctl
0.00 0.000000 0 54 27 read
0.00 0.000000 0 9 sendmsg
0.00 0.000000 0 90 54 recvmsg
------ ----------- ----------- --------- --------- ----------------
100.00 50.022087 1511740 195628 total
只有54个epoll_wait()调用,但是epoll_wait()的usecs /调用是596819,为什么?
答案 0 :(得分:2)
在这种情况下,strace
报告的时间有点误导。
strace(1)
告诉我们:
-c为每个系统调用计算时间,调用和错误并报告a 程序退出摘要。在Linux上,这会尝试显示系统时间 (在内核中运行的CPU时间),与挂钟时间无关。
但我怀疑它实际上只是从epoll_wait
被调用到返回的时间。这并不意味着您的进程在内核中为"running"
。它更有可能是睡觉,这对于epoll_wait
来说是很自然的。