2010-01-24 23 views
4

CPU是什麼意思一個進程的利用率?什麼是CPU使用過程和如何減少?

如何測量它?

減少它的手段是什麼?

我一直對這個概念感到困惑。我試圖通過在Linux中使用'top'命令來測量使用的CPU。但是,我注意到的是,當沒有其他用戶進程正在運行時,那麼當I/O中沒有阻塞時,我的進程似乎會突然增加並佔用99%的CPU。但是,如果還有其他流程正在運行,那麼它將達到45%或50%。沒有其他進程在運行時,進程佔用99%的CPU是否可接受?

在方向的任何鏈接或指針也將有所幫助。

+0

請注意,多核心機器上的'top'報告的使用情況可以顯示單個應用程序的CPU使用率高達200%。很多應用程序仍然是單線程的(或者至少應用程序的「計算密集型」部分仍然是單線程的),所以您會看到使用99%以下CPU的應用程序,但它們只會實現使用50%或25%或12.5%的CPU /內核。 – SyntaxT3rr0r

回答

3

在此上下文中的CPU利用率是每個進程消耗的總可用處理器週期的比例。

如果它只是計算一些冗長的計算,那麼你所看到的就是正常的:操作系統在正在請求它的進程之間公平地分配可用的100%的計算資源。

如果您的程序應該等待某個事件,例如等待用戶按下某個鍵或者輸入從網絡到達,那麼聽起來您的程序處於無限循環狀態:它永遠不會等待任何東西,但只是攪動了所有的時間。如果是這樣的話,你應該考慮重寫它,以便當它沒有工作要做時,它會等待一些東西。這可能正在等待用戶按下一個鍵,使數據包到達網絡連接或其他任何地方。如果是這樣的話,你應該尋找那些代碼:「是否有任何工作要做?不!有任何工作要做?不!有任何工作要做?不!瘋狂。如果是這種情況,您應該找到一種方法來使用適當的操作系統調用或庫函數等待工作。

0

CPU是一種資源。操作系統(例如Linux或Windows)管理此資源,並確保您的所有程序都有時間公平執行。

所以你不必擔心這一點。

2

CPU利用率基本上('使用CPU'* 100 /'實時'花費的時間),通常以小的間隔計算。

99%意味着它只是在不停地等待數據。這很正常,實際上有時候這就是你想要的。等待的越少 - 計算結果的速度越快。

當存在其他具有相同或更高優先級的進程時,CPU利用率下降是正常的。畢竟,只有一個CPU和大量進程試圖同時使用它,每當你的進程不得不等待其他人完成他們的工作時,這就是CPU利用率下降的原因。

但是有時CPU利用率很高。當非關鍵進程在高CPU佔用率的情況下工作數小時時,其他更關鍵的進程無法獲得它們公平的CPU份額,並且需要更長時間才能完成。對於Web服務器,這意味着更少的客戶端可以使用您的服務對於文件服務器,這意味着文件下載需要更長的時間。真實用戶在兩種情況下都會不高興。

因此,基本上,這取決於您的服務器在做什麼,並且是對您的業務至關重要的過程,而不是那麼多。如果它很重要,則希望它儘可能多地佔用CPU。否則儘可能少的CPU。

1

什麼是減少它的手段?

這取決於您是否想要降低CPU使用率峯值的高度或您的長度計算的持續時間或兩者。因此,如果您的應用程序在一分鐘內使用100%CPU,是否要將其「減少」爲「2分鐘內的50%」或「100%30秒以上」或「50分鐘內超過1分鐘」?

這些都是不同的。例如,假設你想要確保應用程序永遠不會佔用雙核計算機的超過50%的計算能力(我並不是說這是一件好事,我只是舉一個例子),那麼有一個非常簡單的方法:你可以將程序的「CPU關聯性」設置爲僅兩個核心中的一個。請注意,我不建議您這樣做:我所說的全部內容是爲了完整起見,它的存在,它的有效用途,以及Linux和Windows開發人員都編寫了API的原因和最終用戶命令,允許在每個進程的基礎上設置CPU親和性(這些功能對程序員和最終用戶都是完全可用的)。

現在,如果你想減少長度計算的持續時間,你必須優化你的應用程序,以便它使用更少的資源(例如通過使用最適合你的問題的算法)。

當沒有其他進程在運行時,進程佔用99%的CPU是否可以接受?

這取決於您的要求。通常是的,這不僅可以接受,而且也是常見的。

2

程序正在運行或正在等待,100%或0%。當你看到一些其他數量的利用率,如50%,這是一段時間內的平均值,如一秒鐘。所以不要擔心使用率。你應該做的是確保它沒有做任何它不必做的事情。 That's what performance tuning is about.這就是它的全部。

+0

簡單而重要。喜歡它 –