2013-03-25 75 views
0
  1. 顶部:进程的CPU的负荷为100%和90%SYS
  2. strace的:所有的系统调用选择
  3. 选择:选择(11,[8,10],NULL ,NULL,{0,10})= 0(超时)的FD 8和FD 10都是FIFO
  4. 的vmstat -n 5:系统CS和系统中是非常低的
  5. Linux操作系统:2.6.16.60
  6. cpu:4核,Intel(R)Xeon(R)CPU E5504 @ 2.00GHz

如何解释呢?我已经改变了选择的超时时间为1秒,CPU系统负载改变为85%,为什么?
为什么选择导致高cpu系统负载?

已经改变的选择NFDs的最高的FD加一,仍然高CPU负载SYS



编辑 - 问题解决

的错误无关,与选择,pthread_互斥_timedwait的第三个参数是绝对时间绝对时间,但我通过使用错相对时间采取,这导致了高cpu系统负载。

为什么pthread_互斥_timedwait导致高CPU负载SYS,不高的CPU负载USR?
strace的:只看到select系统调用,没有其他

+1

的第一个参数'select'应该是你拥有最高文件描述符加一,你的情况,应该是11,而不是1024 – dreamlax 2013-03-25 08:47:05

+0

事实上(手册页):*第一个NFDs的描述符中的每一组检查;即在描述符集中从0到nfds-1的描述符被检查* – 2013-03-25 08:53:27

+0

@dreamlax我已经将nfds更改为最高fd加1,但是cpu sys并没有更好。 – pengdu 2013-03-25 09:22:18

回答

0

你可能有一个坏的(断开)描述符。通常这是读取select的这种负载的主要原因。

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

你可能会做一些事情的select调用之间真的很重。

如果您的select总是返回0,那么问题不在select调用中。其其他地方

+0

他1024作为第一个参数... – LtWorf 2013-03-25 09:22:36

+0

@LtWorf已经改变了1024至11,还是非常高的CPU负载SYS的 – pengdu 2013-03-25 09:25:43

+0

CPU SYS负载由系统调用引起的,但根据strace的,唯一的系统调用选择。 – pengdu 2013-03-25 09:34:46