У меня проблемы с производительностью на сайте, который мы создали, и я не совсем уверен, как начать его диагностику.
Краткое описание: у нас очень маленький сайт ( http://hearablog.com ) с очень небольшим трафиком, на хреновом выделенном сервере, CPU всегда очень высок, иногда он остается на уровне 100% в течение нескольких минут, и w3wp.exe берет большую часть этого. Типичный сценарий: w3wp.exe занимает 60%, а SQL Server - около 30%. Наша БД тоже довольно маленькая.
Длинное описание и более подробная информация:
Сайт размещен на очень дрянном сервере Cari.Net. С самого начала у нас было ощущение, что сервер работает не совсем корректно, например, некоторые вещи могут занять слишком много времени, так что это может быть проблемой конфигурации с самого начала. Это может быть также , что мы получаем виртуальный сервер , в то время как мы должны иметь специальную один, хотя у нас нет никаких доказательств того, что бы указать на это, за исключением того , что сервер имеет тенденцию быть довольно медленным , за исключение.
Сервер 64-разрядный Windows 2008 Standard, с SQL 2008 Express
Аппаратное обеспечение - Celeron 2,80 ГГц, 1 ГБ ОЗУ
Сайт разработан в ASP.Net MVC с использованием Entity Framework для доступа к данным.
Теперь, это довольно дрянное оборудование, но у меня были другие серверы с этими парнями, с эквивалентным (или хуже) HW, и производительность намного лучше, чем этот. Тем не менее, другие серверы имеют W2003 и SQL2005, и я использую ASP.Net "WebForms" 2.0, без MVC, без LINQ, без EF; так что я не уверен, что переход на 2008 год / другие вещи означает большой спад производительности.
Я регулярно обслуживаю файлы MP3 (5-20 Мб), что является немного необычной загрузкой, может быть, это вызывает какие-то проблемы?
Приведет ли это к тому, что w3wp будет использовать много процессора?Использование диска кажется очень низким. Память обычно составляет около 90%, но использование диска, кажется, указывает на то, что она не сильно страничит.
Я получаю тонны электронных писем каждый день о тайм-аутах SQL, для запросов, занимающих более 30 секунд, хотя все наши запросы довольно просты (или должны быть, но EF может облажаться).
Вот как выглядит монитор ресурсов в одном из этих «спринтов» на 100% ЦП, если там есть что-то полезное.
И снимок некоторых счетчиков производительности:
Теперь, что меня очень смущает, так это то, что загрузка процессора w3wp очень высока. Это не должно делать много на самом деле ... Так что мои вопросы ...
- Есть ли способ узнать "что" он делает? Может быть, даже профиль это?
- Какие счетчики производительности я должен смотреть?
- Можно ли этого ожидать при данной аппаратной / программной конфигурации?
- Это может быть вызвано какой-то ошибкой конфигурации, с чего бы вы начали искать?
Большое спасибо вам.
Даниэль Маглиола
источник
Хорошо, для начала - сервер действительно дрянной. Но этого ДОЛЖНО быть достаточно.
Для виртуализации проверьте свои драйверы. Я не знаю ни одной платформы виртуализации, которая бы скрывала процессор (и я могу сказать, что кто-то ставит Hyper-V или ESX на Celeron), но драйверы для дисков и т. Д. Являются показателем.
Процессор не должен быть таким высоким. К сожалению, с этой оперативной памятью вы в значительной степени тост - если вы начнете добавлять профилировщик, вы в значительной степени разрушите вашу память.
Я мог бы:
Для тестирования:
http://learn.iis.net/page.aspx/266/troubleshooting-failed-requests-using-tracing-in-iis-7/
есть начало там. Это может дать вам подсказку на случай, если проблемы будут более «хм» «категорируемыми».
Я также буду вести долгосрочные журналы производительности. Не упустите свой IO (секунды / чтение, секунды / запись - в значительной степени единственные соответствующие). Все остальное IO мудро слишком расплывчато - но как только ваш IO начинает занимать больше времени, чем нужно, диски отстают.
Я бы исключил проблему конфигурации на этом этапе - по крайней мере, в качестве основного показателя. Что-то использует ваши ресурсы W3p, теперь вам нужно выяснить, что это такое.
В общем, это не сервер, который я бы хотел иметь физический - он такой маленький, что бессмысленно иметь ИМХО там машину. Виртуал был бы лучше;)
источник
Вы можете попробовать использовать программу под названием Process Explorer для мониторинга отдельных потоков, запущенных в процессе w3wp. Это должно позволить вам увидеть, какая нить наносит все повреждения.
источник
Мне очень повезло, что я использовал инструмент диагностики отладки Microsoft, чтобы выгрузить мой процесс w3wp, а затем проверить потоки и трассировки стека для вещей, которые были заблокированы. Он даже скажет вам запрошенную страницу, которая породила нить, которая СУПЕР хороша .
http://www.microsoft.com/en-us/download/details.aspx?id=26798
источник
Я согласен с TomTom в дальнейшем, особенно в том, что касается улучшения пробега от Virtual на данный момент. Отладка / профилирование локально, чтобы сузить проблему, является правильным решением.
Я собираюсь надеть мою шляпу и плащ Karnak The Великолепный и попросить первый конверт. Рэм Восстание. Что вы получаете, когда вы помещаете ОС, ASP.NET и жадный SQL Server Express в 1 ГБ.
Я полагаю, что ваша проблема в том, что SQL Server Express вытягивает всю доступную оперативную память для пула буферов и не спешит освобождать ее. См. Http://support.microsoft.com/kb/321363 для получения дополнительной информации. Кроме того, IIS имеет кэш по умолчанию размером 256 МБ, который может потребоваться настроить ( https://stackoverflow.com/questions/2853135/controlling-asp-net-output-cache-memory-usage ). Диагностика отладки - отличный инструмент для устранения этой проблемы (хорошо, возможно, кувалдой).
http://technet.microsoft.com/en-us/library/bb742546.aspx - довольно приличная статья, на которую можно посмотреть. http://social.technet.microsoft.com/forums/en-US/sharepointadmin/thread/706c653a-16b0-4696-85ee-9ae3552a582e указывает на то, что утилизация пулов приложений сошла с ума как еще одна возможная проблема.
источник
Используйте счетчик Perfmon «Process», чтобы увидеть отдельные атрибуты процесса w3wp.exe. Сколько процессорного времени для рабочего процесса занимает время ядра? Высокое время ядра может указывать на подкачку страниц, но вы говорите, что не уверены. Другие возможности дафф водителей. Рабочий процесс имеет 23 активных потока, и это хорошо, но что они делают? Попробуйте ProcessExplorer SysInternals, чтобы покопаться немного больше; Вы также можете увидеть, какие соединения TCP / IP находятся в игре. Я не использовал SQL Express, но у него есть параметры настройки памяти, как у его старшего брата. SQL истощает IIS памяти, вызывая чрезмерное разбиение на страницы?
источник
Возможно, это не совсем связано, но убедитесь, что вы используете NOLOCK в своих запросах. Это может помочь в случае тайм-аутов SQL.
источник