簡體   English   中英

限制CPU使用率的線程數

[英]Number of threads to limit CPU usage

我的應用程序是一個“每請求線程”的Web服務器,其中包含一個M線程的線程池。 單個請求的所有處理都在同一個線程中運行。

假設我在具有N核心的計算機中運行該應用程序。 我想配置M來限制CPU使用率:例如高達所有CPU的50%

如果處理完全受 CPU限制,那么我將M設置為N/2 然而,處理做了一些IO。

我可以用不同的M運行應用程序並使用top -Hps -Ljstat等來監視它。

你怎么建議我估計M

CPU使用率為50%並不一定意味着線程數需要為N_Cores / 2.在處理I / O時,CPU在等待數據從設備到達時會浪費很多周期。

因此,您需要一個工具來測量實際的CPU使用率 ,通過實驗,您可以增加線程數,直到實際CPU使用率達到50%。

針對Linux的perf就是這樣一個工具。 這個問題解決了這個問題。 另外一定要收集統計系統: perf記錄-a

您感興趣的是CPU發出並執行盡可能多的指令/循環 (IPC)。 現代服務器可以執行多達4個IPC,用於強大的計算綁定工作負載。 您希望盡可能接近以獲得良好的CPU利用率,這意味着您需要增加線程數。 當然,如果有許多I / O由於許多上下文切換帶來一些懲罰(緩存刷新,內核代碼等)而無法實現。

所以最后的答案就是增加線程數,直到實際CPU使用率達到50%。

這取決於您的特定軟件和硬件。 硬件很重要,因為如果線程阻塞寫入慢速磁盤,則需要很長時間才能再次喚醒(並再次使用cpu),但如果磁盤非常快,則阻塞只會切換cpu上下文,但線程會立即再次運行。

我認為您只能嘗試使用不同的參數,或者應用程序可能會監視它的CPU使用情況並動態調整池。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM