Спойлер

понедельник, 16 июня 2014 г.

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


Как то я обещал, что напишу, о том как настроить на локальном хостинге под 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 сек.

Комментариев нет:

Отправить комментарий