Condividi tramite


Rilevamento della contesa nel processo server

Per gestire le richieste in ingresso, RPC manterrà un set di thread di lavoro. Idealmente, il numero di thread sarà piccolo. Tuttavia, questa situazione ideale è stata vista solo negli ambienti lab, in cui le routine di gestione server sono accuratamente ottimizzate. In una situazione reale, il numero di thread varia a seconda del carico di lavoro del server, ma può essere ovunque da 1 a 50.

Se il numero di thread di lavoro è superiore a 50, potrebbe essere presente una contesa eccessiva nel processo del server. Le cause comuni di questo tipo sono l'uso icriminato dell'heap, della pressione di memoria o della serializzazione della maggior parte delle attività in un server tramite una singola sezione critica.

Per visualizzare il numero di thread in un determinato processo del server, usare l'estensione !rpcexts.getthreadinfo o usare DbgRpc con l'opzione -t . Specificare l'ID processo (nell'esempio seguente, 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

In questo caso, esistono solo sette thread di lavoro, che sono ragionevoli.

Se sono presenti più di 100 thread, un debugger deve essere collegato a questo processo e la causa è stata analizzata.

Nota L'esecuzione di query come dbgrpc -t in remoto è costosa per il server e la rete. Se si usa questa query in uno script, è consigliabile assicurarsi che questo comando non venga eseguito troppo spesso.