2013-03-25 74 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