2012-04-18 89 views
2

我使用WMI來監控一些數百臺主機。我每5秒查詢CPU使用情況。我正在使用C#的線程池來運行當前調度的適當WMI查詢。通常,運行查詢的線程不超過30個。有時候會有16秒的間隔,而不是5秒,CPU使用率不可見。由於CPU未充分利用,我懷疑是RPC還是TCP/IP堆棧的瓶頸。不過,我認爲這不是TCP/IP堆棧,因爲連接永久保持打開狀態。所以我懷疑監控機器上的RPC存在瓶頸。的Windows RPC調整

是否有任何RPC調整我可以監控機上呢?

更新1:

我已經做了一些調整。NET我張貼之前。我已經調整了ThreadPoolThreadPool.SetMinThreads(200, 200)ThreadPool.SetMaxThreads(300,300)電話。我現在用的是Task對象,所有與TaskCreationOptions.LongRunning | TaskCreationOptions.PreferFairness創建。

回答

2

我使用C#的線程池

這是不是一個好主意,如果你正在運行的代碼,做了很多的攔截和小執行的。像WMI查詢一樣。線程池調度器會嘗試將執行線程的數量限制爲您計算機上的內核數量。這是一個優化,它減少了線程上下文切換的開銷。但它無法預測或檢測到線程並未實際執行代碼。它有一個自適應調度算法來處理它,允許在現有的線程沒有完成時執行額外的線程,但是運行速度很慢。

你可以叫ThreadPool.SetMinThread(),以增加被允許同時執行的線程數。缺省值是核心數量。將其增加到30可以解決您的問題,但會產生全球性的副作用。使用線程而不是線程池是本地解決方案。

+0

不幸的是,我已經做到了我之前發佈。我使用ThreadPool.SetMinThreads(200,200)和ThreadPool.SetMaxThreads(300,300)調用了'ThreadPool'。我正在使用'Task'對象,它們都是使用TaskCreationOptions.LongRunning |創建的TaskCreationOptions.PreferFairness'。 – wilx 2012-04-19 08:39:25