Как я могу исследовать 99% использования ЦП w3wp.exe?

7

w3wp.exe показывает использование процессора на 99%. Каковы наилучшие способы выяснить причину такой высокой загрузки ЦП?

HopelessN00b
источник

Ответы:

6

Присоедините WinDbg + sos и запустите !runaway, Это покажет вам, какой поток занимает больше всего процессорного времени. Сделать !clrstack в теме, чтобы узнать, что он делает.

Brian Rasmussen
источник
4
Можете ли вы дать ссылку или заполнить некоторые инструкции для присоединения процесса? Я использую Windows с 3.11, программирую уже десять лет и не знаю, как это сделать.
Rob Allen
3
И WinDbg, и Visual Studio (и многие другие отладчики) могут подключаться к процессу для его отладки. Причина, по которой я упоминаю WinDbg, заключается в том, что расширения sos позволяют относительно легко найти объятия процессора. Для получения дополнительной информации о WinDbg, пожалуйста, смотрите microsoft.com/whdc/devtools/debugging/default.mspx
Brian Rasmussen
если проблема на LIVE сервере, но у меня нет к ней доступа, есть ли у вас какие-либо предложения.
Без доступа выяснить это будет намного сложнее. Попробуйте просмотреть исходный код. Ищите потенциальные блокировки в реальном времени, огромное потребление памяти (проблема может быть в том, что слишком много времени тратится на сборку мусора) и так далее. Без дополнительных подробностей сложно дать конкретный совет.
Brian Rasmussen
2

w3wp.exe является рабочим процессом ASP.NET, поэтому, если он использует высокий процент ЦП сервера, проблема возникает из-за приложения ASP.NET. Тем не менее, это делает не обязательно указывают на наличие проблемы с приложением ASP.NET. Возможно, он обслуживает слишком много запросов с ограниченными ресурсами. Единственная реальная мера - это проверить использование ЦП по сравнению с объемом трафика, обрабатываемого приложением.

Если вы подозреваете, что определенный запрос занимает слишком много времени, вы можете использовать LogParser утилита командной строки для анализа ваших лог-файлов и определения того, какая страница имеет длительное время выполнения.

c:\>logparser "select top 10 cs-uri-stem, time-taken from INSERT_YOUR_IIS_LOG_FILE_NAME.log group by cs-uri-stem order by time-taken desc" -q:on

Вы также можете использовать инструмент, чтобы показать, какие страницы в настоящее время выполняются, например, IISPeek (не бесплатно).

Если вы хотите пойти глубже, попробуйте понять, как использовать WinDbg. Вот хороший урок: Отладчики Windows: Часть 1. Учебник по WinDbg

splattne
источник
Вы также должны иметь «потраченное время» в выражении group by, иначе скрипт выдаст ошибку.
kafka
0

У меня была эта проблема с перерывами раньше. Кажется, после первого запроса он достигает 99% и никогда не падает. Если я убиваю процесс, новый рабочий процесс обычно ведет себя правильно. Я так и не понял, почему это происходит.

Greg
источник
0

У нас та же проблема, что и Грег отмечает выше. Мы просто убиваем эти процессы. Не наблюдал этого на IIS6 / Windows Server 2003, только на IIS7 / Windows Server 2008.


источник