다음을 통해 공유


서버 프로세스에서 경합 추적

들어오는 요청을 서비스하기 위해 RPC는 작업자 스레드 집합을 유지 관리합니다. 이상적으로는 스레드 수가 적습니다. 그러나 이 이상적인 상황은 서버 관리자 루틴을 신중하게 조정하는 랩 환경에서만 볼 수 있습니다. 실제 상황에서 스레드 수는 서버 워크로드에 따라 다르지만 1에서 50까지는 어디에나 있을 수 있습니다.

작업자 스레드 수가 50을 초과하는 경우 서버 프로세스에서 과도한 경합이 발생할 수 있습니다. 이러한 일반적인 원인은 힙 사용, 메모리 압력 또는 단일 중요 섹션을 통해 서버의 대부분의 활동을 직렬화하는 것입니다.

지정된 서버 프로세스의 스레드 수를 보려면 !rpcexts.getthreadinfo 확장을 사용하거나 -t 스위치와 함께 DbgRpc를 사용합니다. 프로세스 ID를 입력합니다(다음 예제에서는 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

이 경우 7개의 작업자 스레드만 있으며 이는 합리적입니다.

스레드가 100개가 넘는 경우 디버거를 이 프로세스에 연결하고 원인을 조사해야 합니다.

참고dbgrpc -t 와 같은 쿼리를 원격으로 실행하는 것은 서버와 네트워크에 비용이 많이 듭니다. 스크립트에서 이 쿼리를 사용하는 경우 이 명령이 너무 자주 실행되지 않는지 확인해야 합니다.