我有一個用C語言編寫的守護程序應用程序,當前在Solaris 10計算機上沒有已知問題。我正在將它移植到Linux上。我不得不做出最小的改變。在測試期間,它通過所有的測試用例它的功能沒有問題。但是,當我在Solaris計算機上「閒置」時查看其CPU使用率時,它使用的CPU是大約.03%。在運行紅帽企業版Linux 4.8的虛擬機上,同一進程使用所有可用的CPU(通常位於90%+範圍內)。在無限循環內的select()在RHEL 4.8虛擬機上使用的CPU數量遠遠多於在Solaris 10計算機上的CPU數量
我首先想到的是事件循環必須有錯誤。事件循環是一個無限循環(while(1)
),致電select()
。 timeval設置爲timeval.tv_sec = 0
和timeval.tv_usec = 1000
。這似乎對於該流程正在做的事情來說足夠合理。作爲一個測試,我碰到了timeval.tv_sec
。即使這樣做後,我看到了同樣的問題。
有什麼我不知道如何選擇在Linux和Unix上的作品?或者它與在虛擬機上運行的操作系統有什麼不同?或者也許還有一些我完全錯過的東西?
還有一件事我不確定正在使用哪個版本的vmware服務器。不過,它在一個月前剛剛更新。
太棒了!這是問題。謝謝! – Jake 2010-03-12 20:27:57