0
  1. 上:プロセスのCPU負荷は100%、90%sys
  2. strace:すべてのシステムコールが選択されています
  3. select:select(11、[8、10]、NULL、NULL、{0、10})= 0(タイムアウト)、fd8とfd10は両方とも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 sysの負荷を85%に変更しました。なぜですか?

selectのnfdsを最高のfdプラス1に変更しましたが、CPUsysの負荷はまだ高くなっています



編集-問題が解決しましたバグはselect

とは関係ありません。pthread_mutex_timedwaitの3番目の引数abstimeは絶対時間ですが、誤って相対時間を使用したため、CPUシステムの負荷が高くなりました。そして、なぜpthread_mutex_timedwaitは、高いcpu usr負荷ではなく、高いcpusys負荷を引き起こすのでしょうか。strace:selectシステムコールのみを表示し、他は表示しません


4

1 に答える 1

0

記述子が正しくない(切断されている)可能性があります。通常、これが読み取り時のこのような負荷の主な理由ですselect

利用可能なデータがあるかもしれませんが、決してそれを読まないでください。同じ状況。

select呼び出しの合間に本当に重いことをするかもしれません。

selectが常に戻る場合0、問題は発生していませんselect。その他の場所

于 2013-03-25T09:18:59.380 に答える