为什么选择导致高CPU CPU负载?

时间:2013-03-25 08:44:59

标签: c linux performance unix network-programming

  1. top:进程的cpu负载为100%,sys%
  2. 为90%
  3. strace:所有系统调用都是选择
  4. 选择:选择(11,[8,10],NULL,NULL,{0,10})= 0(超时),fd 8和fd 10都是fifo
  5. vmstat -n 5:系统cs和system in非常低
  6. linux:2.6.16.60
  7. cpu:4核,Intel(R)Xeon(R)CPU E5504 @ 2.00GHz
  8. 怎么解释呢?并且我已将select的超时更改为1s,cpu sys load更改为85%,为什么?

    已将select的nfds更改为最高fd加一,仍为高cpu sys加载



    编辑 - 问题解决

    该错误与选择无关,pthread_mutex_timedwait的第三个参数abstime是绝对时间,但我错误地使用了相对时间,这导致了高CPU系统负载。

    为什么pthread_mutex_timedwait导致高cpu sys负载,而不是高cpu usr负载?
    strace:只看到选择系统调用,没有其他

1 个答案:

答案 0 :(得分:0)

您可能有一个糟糕的(断开连接的)描述符。通常,这是读取select上此类负载的主要原因。

您可能有数据,但从未阅读过。同样的情况。

您可能会在select次来电之间做一些非常沉重的事情。

如果您的select始终返回0,则问题不在select电话中。其其他地方