Отслеживание конфликтов в серверном процессе
Для обслуживания входящих запросов 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 , является дорогостоящим для сервера и сети. Если вы используете этот запрос в скрипте, убедитесь, что эта команда выполняется не слишком часто.