Notas del Terrible
Заметки Ужасного Зануды

Различие ASP.NET и PHP на IIS

июня 25, 2010 17:43 by terR0Q

Столкнулся с очень увесистым различием в работе ASP.NET и PHP под управлением IIS. Симптом проблемы очень нагляден: на одном и том же сервере .NET-сайты работают быстро, на основе PHP — тормозят.

Такое положение дел достало, начал копать вопрос. Проверка ping’ом показала, что сетевой проблемы нет: ответы приходят максимум за полсекунды (привет, «последняя миля»). Запустил профилирование на сервере и закидал его запросами по всем сайтам. Профиль был короткий, всего 1 минута, но наглядный.

Проблема вкратце: оперативная память была перегружена и её не хватало, активно использовался своп.

Решение: сервер был хиленький, Hyper-V с 512 Мб рамы. Сейчас памяти в 2 раза больше, а процессорного времени в 2,5 раза больше. Теперь занято не 85%, а 71% в среднем, и главное, что не свопятся сайты.

В чём суть проблемы.

ASP.NET «максимально бинарен». Все страницы компилируются, в конечном счете вся разметка становится бинарным кодом с отдельными строковыми значениями. Плюс такого подхода в компактности и простоте размещения в памяти. Все кешируется во временном каталоге, а сайт висит в памяти, в качестве отдельного приложения.

С PHP история другая. Природа PHP основана на парсинге текста. Как итог, постоянная работа с файловой системой, от которой частично спасает кеширование. Так или иначе, при более менее схожем функциональном объеме, такой сайт будет съедать заметно больше памяти и чаще обращаться к диску, чем сайт под управлением .NET. Именно поэтому сайты на PHP вылетали из оперативной памяти в своп, отсюда и жуткие тормоза в среднем по 2-5 на генерацию ответа — доступ к жесткому диску дорогой.


Добавить комментарий


(Отображает Gravatar)

  Country flag

biuquote
  • Комментарий
  • Предпросмотр
Loading