私は C で書かれたデーモン アプリケーションを持っており、現在、Solaris 10 マシンで既知の問題なしで実行しています。Linuxへの移植を進めています。最小限の変更を加える必要がありました。テスト中、すべてのテスト ケースに合格します。機能に問題はありません。ただし、Solaris マシンで「アイドル」状態のときの CPU 使用率を表示すると、約 .03% の CPU が使用されています。Red Hat Enterprise Linux 4.8 を実行している仮想マシンでは、同じプロセスが使用可能なすべての CPU (通常は 90% 以上の範囲) を使用します。
最初に考えたのは、イベント ループに何か問題があるに違いないということでした。while(1)
イベント ループは、への呼び出しを伴う無限ループ ( )select()
です。timeval は、timeval.tv_sec = 0
およびtimeval.tv_usec = 1000
. これは、プロセスが行っていることに対して十分に合理的と思われます。テストとして、私は 1 にぶつけましtimeval.tv_sec
た。それを行った後でも、同じ問題が発生しました。
Linux と Unix で select がどのように機能するかについて、私が見逃しているものはありますか? または、仮想マシンで実行されている OS とは異なる動作をしますか? それとも、私が完全に見逃している何かがあるのでしょうか?
もう 1 つ、使用されている vmware サーバーのバージョンがわかりません。とはいえ、約1ヶ月前に更新されたばかりです。