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

21716
HopelessN00b

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

7

5 ответов на вопрос

6
Brian Rasmussen

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

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

Другим предложением инструментов является DebugDiag, подробнее см. Здесь
[ОБНОВЛЕНИЕ] Используйте ProcDump, подробнее см. В разделе Использование ProcDump.exe для мониторинга w3wp.exe на предмет скачков ЦП .

Особенно приятно, если никто из разработчиков не предоставит данные о сбоях и т. Д. 14 лет назад 0
2
splattne

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

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

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

0

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

Похожие вопросы