【问题标题】:epoll_wait() consume too much CPUepoll_wait() 消耗过多 CPU
【发布时间】:2017-12-04 09:49:00
【问题描述】:

我的 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,为什么?

【问题讨论】:

    标签: linux epoll strace


    【解决方案1】:

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

    strace(1) 告诉我们:

    -c 统计每个系统调用的时间、调用和错误,并报告一个 程序退出摘要。在 Linux 上,这会尝试显示系统时间 (在内核中运行所花费的 CPU 时间) 与挂钟时间无关。

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

    【讨论】:

    • 我不太确定 strace 是如何计算 CPU 时间的,但该进程实际上确实使用了 2 核机器中 130% 的 CPU。
    • @Wenlin.Wu 这很有趣。你有一个最小的程序来试试吗? epoll_wait 应该只是将进程放在等待队列中;花费大量 CPU 时间听起来像是一个错误。
    • 确实是我的Bind DNS服务,也是Bind的一个已知bug,看这个bugzilla.redhat.com/show_bug.cgi?id=709205,就是不知道怎么回事。
    • @Wenlin.Wu 有趣的错误报告。我不认为epoll_wait 有错的结论;更有可能发生以下情况: 1. named 遇到麻烦并开始使用大量 CPU 2. 你(自然地)strace 它来找出它在做什么 3. strace 用 @987654334 误导你@times - 经典的红鲱鱼。我建议尝试其他方法来测量 CPU 利用率,例如 brendangregg.com/perf.html
    猜你喜欢
    • 2020-06-04
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2018-10-22
    • 2015-05-18
    相关资源
    最近更新 更多