0
  1. top:进程的cpu负载为100%,sys为90%
  2. strace:所有系统调用都是select
  3. select: select(11, [8, 10], NULL, NULL, {0, 10}) = 0 (Timeout) , fd 8 和 fd 10 都是先进先出
  4. vmstat -n 5:系统cs和system in很低
  5. linux:2.6.16.60
  6. cpu: 4 核, Intel(R) Xeon(R) CPU E5504 @ 2.00GHz

怎么解释?我把select的超时时间改成了1s,cpu sys负载改成了85%,为什么?

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



编辑 - 问题已解决

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

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

4

1 回答 1

0

您可能有一个错误的(断开连接的)描述符。通常这是 read 负载如此大的主要原因select

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

select您可能会在通话之间做一些非常重要的事情。

如果您select总是返回0,那么问题不在select呼叫中。它在别处

于 2013-03-25T09:18:59.380 回答