追蹤伺服器進程中的爭用

為了服務傳入要求,RPC 會維護一組背景工作執行緒。 在理想情況下,執行緒數目將會很小。 不過,只有在實驗室環境中才會看到這種理想的情況,其中伺服器管理員常式會仔細調整。 在實際情況下,執行緒數目會根據伺服器工作負載而有所不同,但可以是 1 到 50 的任何位置。

如果背景工作執行緒數目高於 50,則伺服器進程可能會有過多爭用。 常見的原因是使用堆積、記憶體壓力,或透過單一重要區段序列化伺服器中大部分的活動。

若要查看指定伺服器進程中的執行緒數目,請使用 !rpcexts.getthreadinfo 擴充功能,或使用 DbgRpc 搭配 -t 參數。 在下列範例中提供進程識別碼 (,0xC4) :

D:\wmsg>dbgrpc -t -P c4
Searching for thread info ...
## PID  CELL ID   ST TID      LASTTIME
-----------------------------------
00c4 0000.0004 03 0000011c 000f164f
00c4 0000.0007 03 00000120 008a6290
00c4 0000.0015 03 0000018c 008a6236
00c4 0000.0026 03 00000264 0005c443
00c4 0000.002d 03 00000268 000265bb
00c4 0000.0030 03 0000026c 000f1d32
00c4 0000.0034 03 00000388 007251e9

在此情況下,只有七個背景工作執行緒是合理的。

如果有超過 100 個執行緒,偵錯工具應該附加至此進程,並調查原因。

注意 從遠端執行 dbgrpc -t 等查詢對伺服器和網路的成本很高。 如果您在腳本中使用此查詢,您應該確定此命令不會太常執行。