RSS
 

 

Оптимизация Apache 2, PHP и MySql в среде Windows

15 Мар

Как то я обещал, что напишу, о том как настроить на локальном хостинге под Windows связку Apache, PHP и MySql для получения максимальной производительности.

Многие программисты при разработке и тестировании сайтов используют локальный персональный компьютер под управлением OS Windows на котором эмулируют работу реальном хостинге. Можно самому установить Apache, PHP и MySql на компьютер, можно воспользоваться готовыми пакетами инсталяций типа Denver, XAMPP и другие. Настроки по умолчанию установленных пакетов оставляют желать лучшего и вот почему.

У меня довольно мощные персоналки, но удивило то, что разность генерации одних и техже страниц на реальном хостинге при примерно одиноаковой конфигурации железа с локальным сервером составляет 10-100 раз! Неужели Windods настолько плох для Apache, PHP и MySql? Но ведь работает же достаточно быстро и эффективно IIS и ASP на серверах и на локальном сервере у меня на IIS все шустро шевелится. Оказывается все дело в "кривых руках" так сказать :)

Анализируя проблему и сравнивая всевозможными методами замеры производительности маркеров в скриптах, внимательно изучая конфигурационные файлы как серверов Apache и MySql так и IIS и MS Sql Server, рыская по многочисленным форумам   нашел причины. По умолчанию включенные в дистрибутивы Apache, PHP и MySql настройки предназначены скорее всего под Linux/Unix платформы. Отсюда и растут грабли.

Оптимизация Apache 2 и PHP.

Основная проблема в производительности Apache+PHP на Windows платформе, это медленные файловые операции. Linux/Unix с файлами работает очень шустро и все это настроено на уровне операционной системы. Каких либо настроек по оптимизации файловой системы в Windows я не знаю, может быть они и есть но о них мне неизвестно. (позже я нашел одну такую настройку)

При малом количестве файлов участвующих в генерации страниц практически незаметна разница генерации между Unix и Windows, однако часто сайты используют  всевозможные движки или библиотеки, а они состоят из сотен, а то и тысяч фалов. Например Joomla 1.5 состоит из более чем 6000 файлов мелкого размера. В основном это скрипты PHP. На доступ к ним и считывание по мере генерации страницы и тратится основное время.

Что делать?

Опытным путем было установлено что нужно оптимизировать файловый кеш и кеш памяти. Что меняем?

php.ini

realpath_cache_size=16000k (default - 16k)
realpath_cache_ttl=1200 (default - 120)
Это основные настройки которые существенно влияют на производительность, можно поиграться и другими, но они уже дают не столь значащий результат и зависят больше от конкретного случая.
Также рекомендую настроить системный кеш.

Оптимизация MySql.

С базой данных MySql основное время занимает установка соединения. Как оказалось по умолчанию соединение идет через tcp/ip порт. Каково же было мое удивление, когда я увидел что на установку соединения с базой MySql из PHP уходит порядка 0.7-0.5 сек! Причем при последующих запросах это время практически не уменьшается.   Для ускорения на Unix серверах при локальном подключении рекомендуют использовать socket=mysql (специальный прямой поток),  но на Windows этого нет. Зато есть  

named-pipe. При использовании именованного канала время подключения составляет менее 0,01 - 0,005 сек, и при последующих запросах практически стремится к нулю. Но о том как его использовать и настроить написано очень мало на форумах, я с трудом нашел на форумах у буржуев, как настроить и как правильно использовать именованный канал  потом  при подключении.

Включаем его в конфигурации my.cnf и при обращении из скриптов PHP в данном случае нужно обращаться к серверу локальному как ".". Также рекомендую  в php.ini прописать mysql.default_host=".", чтобы по умолчанию при неуказанном имени сервера в соединении  использовать именованный канал вместо порта tcp/ip.

 

my.cnf

[mysqld]
 
enable-named-pipe

php.ini

mysql.default_host = "."
Это основные настройки которые существенно влияют на производительность, можно поиграться и другими, но они уже дают не столь значащий результат и зависят больше от конкретного случая.

Используя выше приведенные параметры у меня ускорилась генерация страниц под управлением CSM Joomla 1.5 c 2.1 - 1.8 сек до 0.8 - 0.3 сек на локальном хостинге. На реальном платном хостинге под unix те же страницы генерируются 0,3 - 0,14 сек.


 


 
 

Метки: , , , 15.03.2010

 

  • Анатолий

    Спасибо большое, действительно дельная статья и коменты к ней. Уменьшил время отклика на joomle(win2008+apache+php+mysql) с примерно 2 сек, до 0.5
    Автору поклон.

  • Александр

    о боги, а я несколько лет мудохался со скоростью joomla

    realpath_cache_size=16000k (default — 16k)
    realpath_cache_ttl=1200 (default — 120)

    очень помогло, благодарствую!

    • http://www.tumencev.pp.ua Виталий Тюменцев

      Рад, что помогло :)

  • rudenich

    Спасибо очень уникальный материал

  • Виталий Тюменцев

    It’s good that you liked the article…

  • C37TmcKyWx

    Great article very important information i found here