我的 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/call 是 596819,为什么?

最佳答案

在这种情况下,strace 报告的时间有点误导。

strace(1) 告诉我们:



但我怀疑它实际计算的 只是从 epoll_wait 被调用到它返回 的时间。这并不意味着您的进程是内核中的 "running"。它更有可能在 sleep ,这对 epoll_wait 来说是很自然的。

关于linux - epoll_wait() 消耗太多 CPU,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47630538/

10-11 16:43