У меня проблема с производительностью на созданном нами сайте, и я не совсем уверен, как начать ее диагностику.
Краткое описание: У нас очень маленький сайт (http://hearablog.com) с очень небольшим трафиком, на дрянном выделенном сервере процессор всегда очень высок, иногда он остается на 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 для доступа к данным.
Это довольно дрянное оборудование, но у меня были другие серверы с этими парнями, с эквивалентным (или хуже) оборудованием, и производительность намного лучше, чем у этого. Тем не менее, на других серверах есть W2003 и SQL2005, и я использую ASP.Net «WebForms» 2.0, без MVC, без LINQ, без EF; так что я не уверен, означает ли переход к 2008 году / другие вещи большие потери производительности.
Я регулярно обслуживаю файлы MP3 (5-20 Мб), это немного необычная нагрузка, может быть, это вызывает какие-то проблемы?
Это приведет к тому, что w3wp будет использовать много ЦП?
Использование диска кажется очень низким. Память обычно составляет около 90%, но использование диска указывает на то, что подкачки мало.
я получил тонны ежедневных электронных писем о тайм-аутах SQL для запросов, занимающих более 30 секунд, хотя все наши запросы довольно просты (или должны быть, но EF, возможно, облажается).
Вот как выглядит монитор ресурсов в одном из этих «спринтов» 100% CPU, на случай, если там есть что-нибудь полезное.
И снимок некоторых счетчиков производительности:
Что меня очень смущает, так это то, что загрузка процессора w3wp настолько высока. На самом деле это не должно делать много ... Так что мои вопросы ...
Большое спасибо.
Даниэль Мальола
Вы также можете использовать пользовательский интерфейс рабочих процессов внутри IIS Manager и проверять запросы, которые в настоящее время выполняются, и видеть, где они застревают, если таковые имеются. Откройте диспетчер IIS-> щелкните сервер в дереве-> дважды щелкните значок рабочих процессов-> дважды щелкните рабочий процесс, который потребляет ЦП, чтобы увидеть выполняющиеся в настоящее время запросы в режиме реального времени, чтобы вы могли видеть, какой модуль требует времени.
Также рассмотрите возможность использования отслеживания неудачных запросов, чтобы отслеживать время выполнения каждого запроса, чтобы узнать, где они занимают много времени.
Хорошо, для начала - сервер ДЕЙСТВИТЕЛЬНО хреновый. Но этого ДОЛЖНО быть достаточно.
Для виртуализации проверьте свои драйверы. Я не знаю ни одной платформы вирутализации, которая скрывает ЦП (и я могу сказать, что кто-то ставит Hyper-V или ESX на Celeron), но драйверы для диска и т. Д. Являются показателем.
ЦП не должен быть таким высоким. К сожалению, с этой оперативной памятью вы в значительной степени тост - если вы начнете добавлять профилировщик, вы в значительной степени испортите имеющуюся у вас память.
Я буду:
Для тестирования:
http://learn.iis.net/page.aspx/266/troubleshooting-failed-requests-using-tracing-in-iis-7/
есть начало там. Это может дать вам подсказку в случае, если проблемы более - хм - "поддаются классификации".
Я бы также вел долгосрочные журналы производительности. Следите за своим вводом-выводом (секунды / чтение, секунды / запись - практически единственные важные из них). Все остальное - слишком расплывчато с точки зрения ввода-вывода - но как только ваш ввод-вывод начинает занимать больше времени, чем следует, диски отстают.
Я бы исключил проблему конфигурации на этом этапе - по крайней мере, в качестве основного индикатора. Что-то израсходовало ваши ресурсы W3p, теперь вам нужно узнать, что это такое.
В общем, это не тот сервер, который мне бы хотелось иметь физический - он такой маленький, ИМХО нет смысла иметь там машину. Виртуальный бы лучше;)
Вы можете попробовать использовать программу под названием Обозреватель процессов для отслеживания отдельных потоков, выполняемых в процессе w3wp. Это должно позволить вам увидеть, какая нить вызывает все повреждения.
Мне очень повезло с использованием средства диагностики отладки Microsoft, чтобы выгрузить мой процесс w3wp, а затем проверить потоки и трассировку стека на предмет блокировок. Он даже скажет вам запрошенную страницу, которая породила поток, который СУПЕР приятно.
http://www.microsoft.com/en-us/download/details.aspx?id=26798
Я согласен с TomTom в дальнейшем, особенно в отношении увеличения пробега от Virtual на данный момент. Локальная отладка / профилирование для сужения проблемы - это правильный шаг.
Я собираюсь надеть шляпу и накидку «Карнак Великолепный» и попросить первый конверт. Ram Rebellion. Что вы получите, если поместите ОС, 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 «Процесс», чтобы увидеть отдельные атрибуты процесса w3wp.exe. Какую часть процессорного времени рабочего процесса занимает ядро? Большое время ядра может указывать на подкачку, но вы говорите, что не уверены. Другие возможности - это драйверы. У рабочего процесса 23 активных потока, и это хорошо, но что они делают? Попробуйте ProcessExplorer SysInternals, чтобы немного покопаться; вы также можете увидеть, какие TCP / IP-соединения используются. Я не использовал SQL Express, но есть ли у него параметры настройки памяти, как у его старшего брата. SQL не хватает памяти IIS, вызывая чрезмерное разбиение на страницы?
Это может быть не полностью связано, но проверьте, используете ли вы NOLOCK в своих запросах. Это может помочь в случае тайм-аутов SQL.