Administrators/Optimize performance/Webserver/ru

Использование HHVM
Facebooks HipHop Virtual Machine реализует высоко оптимизированную виртуальную машину для кода PHP, которая значительно быстрее, чем официальный интерпретатор PHP. Тесты показали, что HHVM примерно в 2.5 раза быстрее, что комбинация интерпретатора PHP и APC при использовании для Arcavias. Так как ядро Arcavias полностью поддерживает HHVM, это может дать магазину огромный прирост производительности. В VM, работающей на оборудовании с 2010, мы получили время отклика 130 мс для некешируемого списка и детального описания, и 80 мс для обоих режимов при кешировании!

Замечание: HHVM не на 100% совместимо с официальным интерпретатором PHP, но с каждой версией становится всё более совместимой. Это значит, что не всякий код без проблем заработает на HHVM, и некоторые модули PHP пока еще недоступны для HHVM. Если ядро Arcavias используется как часть другого приложения, сначала проверьте будет ли работать это приложение с HHVM!

Использование PHP 5.4 или новее
Разработчики ядра PHP сильно исправили производительность в PHP 5.4 и более новых версиях. Можно увидеть прирост скорости на 30% по сравнению с PHP 5.3. Кроме того, PHP 5.5 интегрирует собственный кеш бит кода, поэтому APC здесь больше не требуется. Если невозможно использовать для магазина HHVM, можно добиться даже лучших результатов, используя PHP 5.4 или 5.5.

Замечание: даже при условии, что PHP 5.5 реализует собственный кеш бит кода, он не имеет кеша для хранения значений настроек и переводимых строк! Arcavias много выжимает из кеширования этих данных, и Arcavias примерно на 30% быстрее при использовании PHP 5.4 и APC по сравнения с использованием PHP 5.5 без APC.

Использование APC
Arcavias — очень мощная и гибкая, объектно-ориентированная технология, состоящая из множества файлов PHP. Помните, что PHP язык интерпретируемый и без APC каждый файл будет анализироваться при каждом новом запросе. Что выливается в большие затраты времени на перевод файлов в битовый код и сильно сказывается на производительности. Фактически, производительность того же сервера без APC в 3-4 раза хуже, чем с APC.

Замечание: если значения настроек кешируются при помощи APC или другого кеша памяти, необходимо очищать кеш настроек (называемый в APC "пользовательский/user" кеш) каждый раз при изменении настроек или при обновлении кода. Иначе приложения будут вести себя непредсказуемо или даже вылетать с ошибками.

Для получения максимальной производительности, можно отключить проверку изменения файлов PHP. Это снизит количество вызовов stat, и особенно полезно при медленном хранилище (например, жёстком диске). Обновлённые файлы при этом будут задействованы после очистки кеша APC или ручного удаления файла из кеша.

php_admin_value apc.stat 0

Если сервер должен параллельно отвечать на множество запросов в приложении на базе Arcavias, необходимо отключить apc.slam_defense. Оно по умолчанию включено, и может приводить к ошибкам в приложениях при загрузке веб сервера. Вместо этого проверьте, что включено apc.write_lock (обычно так и есть при настройках по умолчанию).

php_admin_value apc.slam_defense 0 php_admin_value apc.write_lock 1

Не храните исходный код на общедоступных NFS
NFS (сетевые файловые хранилища/network file system) — способ доступа к файлам на удалённом сервере по сети. Это отличное решения для обмена файлами между различными хостами, а также иногда используется для централизованной установки веб приложений. Тем не менее, эта технология имеет один важный недостаток, даже если файлы кешируются на стороне клиента: зачастую файлы должны быть загружены из удалённого сервера и сохранены на локальный диск, а это очень медленно. Тестирование показало, что выполнение запроса занимает в 3-4 раза больше времени, если файлы Arcavias находятся на сервере NFS, а не на локальном жёстком диске.

Если по каким-либо причинам используется NFS, то кеш байт кода APC может помочь в смягчении проблемы. Удостоверьтесь, что для APC используется следующая настройка:

php_admin_value apc.stat 0

Это отключает проверку времени изменения каждого файла при каждом запросе, и, соответственно, улучшает производительность хранилищ NFS примерно на 50%. Смотрите информацию в PHP документации. Кроме того, удостоверьтесь, что очистили системный кеш APC после изменения кода, и эта настройка должна быть установлена лишь на работающих серверах, где код меняется нечасто.

Адаптация размера кеша реального пути PHP также может помочь сократить потерю производительности в NFS.

Адаптация размера кеша реального пути PHP
Ядро Arcavias состоит из множества файлов, при этом include_once проверяет включение файлов через системный вызов lstat. На быстрой (локальной) файловой системе множество вызовов lstat незаметно, так как жёсткий диск достаточно быстр и не тормозит выполнение приложения.

Но всё иначе при использовании удалённой файловой системы, вроде NFS. Если использование NFS не удаётся избежать, то можно по крайней мере использовать кеш реального пути PHP для уменьшения количества вызовов lstat, которые должны посылаться по сети. В следующей статье всё описано детально. Необходимые настройки для хоста следующие:

php_admin_value realpath_cache_size 128K php_admin_value realpath_cache_ttl 3600

Размер кеша в 128 Кбайт может быть хорошим начальным значением, так как Arcavias demo использует около 80 Кбайт кеша. Актуальное значение можете проверить самостоятельно, оно выводится в конце HTML кода для каждого запроса в demo сайте. Лучше всего подходящее значение зависит от приложений, использующих технологию Arcavias. Если приложение также использует множество файлов, значение должно быть больше. Чтобы увидеть актуально используемый кеш, можно вызвать простейший сценарий из браузера, который включает:

<?php echo realpath_cache_size;

Деймс Хейден (James Hayden) написал статью об оптимизации настроек размера кеша реального пути PHP. Как он утверждает, кеш должен быть по необходимости большим, но по возможности как можно меньшим, так как кеш попроцессорный. Для значения TTL (время в секундах, после которого информация о файлах будет заново получена из файловой системы) можно установить высоким, если разрешения на файлы не изменяются (а это должно быть так). В документации PHP также имеется раздел о настройках кеша реального пути.

Получение статического содержимого из кешей
Для получения статически файлов веб серверу нужно значительно больше времени, чем кеширующему прокси серверу, вроде Squid. Хранящиеся в основной памяти прокси сервера файлы отсылаются клиенту почти моментально, а веб сервер может заняться выполнением сценариев PHP, формирующих исходный код HTML.

Если покупатели из разных стран, необходимо подумать об использовании сетей доставки содержимого (content delivery network — CDN). При этом статические файлы, вроде изображений, CSS и файлов JavaScript могут быть получены значительно быстрее из кеша, находящегося географически ближе к пользователю из-за меньшей задержки при получении запрашиваемых файлов. Для загрузки страницы разница может быть до нескольких секунд.