мы используем сервер Windows 2003 с двумя процессорами, и IIS переполняется запросами и не может их обрабатывать, но в то же время он использует менее 20% ЦП и менее 40% оперативной памяти. Когда сервер не может обслуживать какие-либо запросы, он не только не может просматривать сайт, но даже не обслуживает изображения, которые используются на других наших сайтах. Мы думаем об установке VMWare, чтобы на этой машине было 2 сервера, и один сервер использовался для обслуживания страниц asp.net, а другой - для обслуживания изображений и простых HTML-страниц. Вы, ребята, знаете, как мы можем направлять запросы изображений и html-страниц на один сервер, а запросы aspx-страниц - на другой?
Любые идеи приветствуются.
Спасибо Денис
Хмнн, сколько запросов в секунду (разделены на статические и динамические) мы говорим, и на каком оборудовании? В вашем сообщении нет подробностей, но звучит немного странно, что IIS должен быть перегружен и по-прежнему использовать только 40% ЦП.
Я бы точно не стал использовать для этого VMWare. Виртуализация - отличный метод, и у него много хороших применений, но это не одно из них. Любая виртуализация имеет накладные расходы по производительности из-за работы на «голом железе», и в этом сценарии это ухудшит ваше положение.
Зайдите в лог-файлы и посмотрите Метрики монитора производительности для ЦП, сетевого ввода-вывода, дискового ввода-вывода и использования ОЗУ, и посмотрите, указывает ли это вам в каком-либо конкретном направлении.
Есть ли перед IIS устройства, которые могут быть перегружены? Дешевые межсетевые экраны SOHO, любые HTTP-прокси, любые межсетевые экраны для «проверки содержимого» или системы IDS?
Вы просматривали код aspx, который вы запускаете? Есть ли в нем какие-нибудь глупые дизайнерские решения, которые могут приостановить работу всего компьютера, например, массовая перегрузка диска или исчерпание пулов потоков?
Если сервер действительно работает на пределе своих возможностей, и нет быстрого выигрыша, то можно было бы рассмотреть следующее:
Недорогое решение - настроить 2 имени хоста DNS, например www.companyname.com и static.companyname.com, а затем настроить 2 сайта в IIS, один оптимизирован для обслуживания статических файлов, а другой - для динамического контента (aspx). Для статических файлов я обычно включаю постоянные HTTP-соединения, для динамического контента я бы отключал их. Оптимизация может дать вам некоторое пространство для вдохновения с точки зрения производительности, но этого может быть или недостаточно. Насколько я знаю, в IIS 6 нет возможности гарантировать выделение определенного ресурса между сайтами.
Оптимальный способ разделения статических content заключается в том, чтобы полностью переместить все статические файлы, обслуживающие сервер, либо выделив новый сервер для этой задачи, либо, что еще лучше, используя CDN.
Цены на CDN начального уровня резко снизились, поскольку Amazon S3 + Cloudfront, CacheFly и другие имеют низкую начальную цену. Конечно, добавление CDN означает добавление еще одной точки отказа в вашу общую архитектуру, но CDN в основном хороши в поддержании высокого времени безотказной работы из-за их распределенной природы. Добавление CDN потенциально сделает ваш сайт более быстрым для зарубежных пользователей.
Возможно, вы могли бы перейти на Windows Server 2008 и IIS7 и использовать Маршрутизация запросов приложений.
На самом деле вы можете попробовать этот ответ из Переполнение стека чтобы открыть стек TCP / IP.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"EnablePMTUDiscovery"=dword:00000001
"MaxUserPort"=dword:0000fffe
"TCPTimedWaitDelay"=dword:0000003c
"TCPMaxSendFree"=dword:0000ffff
"SynAttackProtect"=dword:00000001
В каком смысле «не справиться»? IIS выдает ошибку? Что-нибудь в журнале access_log или HTTPERR?
Помимо пропускной способности сети, я бы также посмотрел на активность диска и память. Если объем выделенной памяти превышает объем вашей машины, есть один возможный ответ: окна должны быть заменены, и ваши диски будут заняты.
Если память в порядке, все равно проверьте активность диска: не слишком ли они медленны для поступающего количества запросов?
Что касается маршрутизации, единственное, что вы могли бы сделать без перезаписи страниц, - это установить прокси-сервер перед серверами, который направляет запросы на основе URL-адреса. Это может быть UNIX / Linux с Squid или Apache, или Windows с прокси-сервером в той или иной форме, или, возможно, даже с выделенным оборудованием для балансировки нагрузки.
Вы уверены, что проблема в сервере, а не в вашей пропускной способности или, возможно, в количестве открытых подключений (возможно, в брандмауэре)?
Попробуйте получить данные, собранные с помощью монитора производительности Windows. Вы также можете попытаться изолировать веб-сайты, поместив их в разные пулы приложений, прежде чем настраивать виртуальный сервер.
У вас на руках решаемая проблема. Если вы попытаетесь связать это с виртуальной машиной, вы просто превратите свою решаемую проблему в 3 проблемы, 2 из которых не будут решаемы.
PerfMon, вероятно, сообщит вам, что у вас есть давно выполняющиеся запросы ASP или ASP.NET, вызывающие перегрузку ваших асинхронных потоков. Если это верно, вы действительно можете решить эту проблему, только ускорив обработку вашего запроса.
Самый простой путь вперед - это, вероятно, включить свойство расширенного ведения журнала «Time Taken» и потребовать от вашего разработчика (вас самих?), Чтобы каждая страница обрабатывалась менее чем за X миллисекунд. Можно обрабатывать длительные запросы с помощью нескольких быстрых асинхронных запросов, поэтому не принимайте отрицательный ответ.
Проблема с загрузкой изображения - это симптом и благословение. Он говорит вам, что вы можете работать.