Низкая производительность веб-сайта ASP.NET на производственном сервере

2

Моя проблема в том, что мой сайт ASP.NET работает медленнее на моем производственном сервере сравнительно на моем сервере разработки.

Страница, выполняемая в 120 мс в моей среде разработки, занимает 400 мс для выполнения на сервере. Я отслеживал SQL-сервер с профилировщиком, и запрос, выполняемый на странице с 400 мс на сервере, занимает всего около 50 мс, поэтому я убедился, что моя проблема не связана с SQL-сервером.

Моя машина для разработки - это Intel I7 с оперативной памятью 6 ГБ, производственный сервер - 2x AMD Quad Core с 16 ГБ оперативной памяти.

  • 0
    Как вы измеряете скорость?
  • 0
    Секундомер в модуле HttpModule, в основном измеренное время - это время, необходимое для перехода от BeginRequest к событию EndRequest.
Показать ещё 11 комментариев
Теги:
website
iis

9 ответов

16

Есть некоторые моменты, которые вы можете рассмотреть для повышения производительности вашего сайта.

  • Установить debug = false
  • Отключить трассировку, если только не требуется
  • Отключить состояние сеанса, если это не требуется. ASP.NET Управляет состоянием сеанса автоматически. Однако, если вы не требуете сеансов, отключение его поможет улучшить производительность.
  • Отключить ViewState как и когда не требуется.
  • Избегайте частых командировок в базу данных
  • Избегайте исключений броска. Исключения являются наиболее распространенным способом обработки ошибок, возникающих в вашей логике приложения. Однако выброс исключений является дорогостоящим ресурсом и его следует избегать. Используйте определенные исключения и используйте как можно меньше, чтобы избежать накладных расходов ресурсов.
  • Используйте Caching для повышения производительности вашего приложения.
  • Использовать метод finally для уничтожения ресурсов

Edit: оценивайте эффективность своего сайта с помощью этого веб-сайта http://www.websiteoptimization.com/services/analyze/
http://www.websitepulse.com/

  • 4
    Это все отличные советы, но прежде чем что-то оптимизировать, я бы хотел, чтобы мой сервер действительно работал примерно так же, как моя машина разработки, и не работал в 3 раза медленнее - что смешно!
5

Вы проверили, что debug = false в вашем web.config?

Является ли сервер 64-битным? Попробуйте создать выделенный пул приложений для своего приложения и настройте пул приложений для запуска в 32-битном классическом режиме. Делает какую-то разницу?

Является ли ваш класс предварительно скомпилированным или его настроить для компиляции во время выполнения?

  • 0
    Вначале это было бы правдой в отношении развития, не так ли?
  • 0
    Я пытался изменить это значение, это не имеет большого значения.
Показать ещё 4 комментария
2

Установить Трассировка = "истина" (<% @Page Трассировка = "истина"...) на вашей странице, и вы получите много полезной информации, в нижней части страницы, когда он загружает в браузере. Вы точно знаете, сколько времени потребуется для обработки запроса на сервере. Если время достаточно низкое, проблема может быть в настройках IIS. Сравните их с теми, которые находятся в вашей среде разработки.

  • 0
    Я могу видеть из трассировки, что большая часть времени выполнения от события загрузки страницы.
  • 0
    что в событии загрузки страницы тогда ??
Показать ещё 1 комментарий
1

Из чтения всех предложений, и похоже, что ничего не работает, постепенно вводите код из своего сайта и смотрите, как это влияет на время. Удалите около 10 строк кода или HTML за раз, и посмотрите, есть ли огромная разница.

В противном случае это, вероятно, связано с IIS, и, к сожалению, я не являюсь гуру IIS.

  • 0
    Я попытался удалить некоторые функции, требующие высокой производительности, с веб-сайта, и, хотя он, очевидно, улучшает производительность, а не так, как кажется, сервер, как правило, медленнее выполняет код, несмотря на это. Хотя я и провел простой цикл for ( прокомментировал это в моем первоначальном посте), где сервер будет обрабатывать простой цикл быстрее, чем моя машина для разработки, 10 миллионов итераций было быстрее на рабочей машине - но как только меня вызвали, какая-то функция, находящаяся в моей библиотеке классов, работающий сервер был бы помедленнее..
1

Является ли ваш SQL-сервер на другом сервере на производстве, но локальным в разработке?

  • 0
    Сервер SQL работает на том же сервере, что и IIS
0

После того, как я долго стучал головой о стену относительно разницы в производительности моей машины разработки и производственной машины, я, наконец, оказался в стороне от ощущения, которое у меня было глубоко, что процессор действительно имеет значение гораздо больше, чем вы думаете.

Я изменился с решения на базе AMD на решение на базе Intel (Xeon!), получив 3,3 ГГц и более быстрые диски.

Я также получил повышение производительности, вместо того, чтобы быть x3 столь же медленным, как и моя машина для разработки, теперь он спустился на что-то вроде x0.75 медленнее - очевидно, все еще не тем молниеносной скоростью, на которую способна моя машина разработки, но она приближается.

В то время, когда мы отлаживали это, я заметил, что большая часть производительности hog (что неудивительно) приходит от LINQ to SQL, чтобы скомпилировать запросы, что кажется мне странным, так это то, что когда я попытался предварительно скомпилировать запрос LINQ и запустить то же самое на обеих моих машинах, машина разработки оказалась быстрее.

  • 2
    Я думаю, что выигрыш в производительности от перехода с «отладки» на «производство» перевесит любую отрицательную разницу в процессорах.
  • 0
    Хотите знать, какова была загрузка вашего процессора на рабочем сервере до и после переключения процессора?
0

Вам нужно уменьшить переменные.

Попробуйте устранить все различия между двумя средами, а затем внесите изменения один за другим, пока не выясните, что это такое.

Убедитесь, что web.config в обеих средах одинаковый.
Убедитесь, что обе среды указывают на один и тот же сервер базы данных на третьем ящике.
Убедитесь, что одна и та же версия IIS находится в обеих средах.
Убедитесь, что IIS настроен одинаково в обеих средах.
Запустите те же данные теста в обеих средах.
и т.д...

  • 0
    Я пытаюсь, но я в растерянности, что еще я могу сделать на данный момент, я могу отметить все в вашем списке, кроме запуска базы данных на третьем сервере, так как это не вариант для меня.
0

Массивное представление, вызывающее задержку передачи?

  • 0
    Я попытался отключить ViewState в файле web.config, возможно, есть небольшое улучшение, но мы все равно тратим на выполнение сервера в 3 раза медленнее по сравнению с машиной для разработки ...
0

Является ли это единственным веб-сайтом, который у вас есть на сервере? 16 ГБ - неплохая память, но если на этом же сервере есть много популярных сайтов, они могут потреблять ресурсы и время процессора.

Кроме того, я не могу думать о какой-либо причине, почему ваш сайт будет медленным в производстве, чем в разработке.

Вы проверили индексы? Они все есть на сервере?

  • 0
    Единственное, что в данный момент работает на сервере - это один веб-сайт.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню