Портал > База знаний > Администрирование Linux > Оптимизация PHP. Часть 1
Задача:
Увеличение производительности сайта.
Решение:
Для увеличения производительности и скорости работы веб-приложения можно произвести оптимизацию PHP, который отвечает за динамическую составляющую сайта. Для этого можно перевести интерпретатор PHP в один из 3 режимов работы:
PHP как модуль Apache PHP как CGI, PHP как FastCGIPHP как модуль Apache:
В это режиме для запуска PHP используется модуль веб-сервера apache mod_php. В данном режиме скрипты выполняются быстрее всего, так как сервер сам обрабатывает скрипты, однако это дает излишнюю нагрузку на веб-сервер. Для всех скриптов используется общий конфигурационный файл (php.ini). Если скрипт работая в режиме модель apache запустил стороннее приложение, то невозможно будет определить какой пользователь запустил данный скрипт. Так же ошибки в скриптах могут приводить к неработоспособности всего веб-сервера apache.
PHP как CGI:
В это режиме для запуска PHP используется модуль веб-сервера apache mod_cgi. Скрипты передаются посредством данного модуля на вход интерпретатора PHP. В данном режиме скрипты имеют отдельный процесс и выполняются с правами пользователя – владельца www-домена, потребляют меньше оперативной памяти по сравнению с модулем apache и ошибки в скриптах не приводят к неработоспособности всего веб-сервера. Так же, в данном режиме имеется возможность сконфигурировать PHP для каждого пользователя.
PHP как FastCGI:
В это режиме для запуска PHP используется модуль веб-сервера apache mod_fastcgi. Скрипты передаются посредством данного модуля на вход интерпретатора PHP. Отличием от режима PHP как CGI является то, что для скрипта происходит кэширование некоторых промежуточных данных и нет необходимости интерпретировать его каждый раз перед выполнением, за счет этого достигается более высокая скорость выполнения.
Что необходимо для оптимизации PHP
Для повышения производительности PHP необходимо:
Если имеется доступ к управлению программным обеспечением сервера, то следует обновиться до последней версии PHP 5.6.3.В версии PHP 5.6 реализовано много новых концепций, сделано немалое количество обновлений безопасности, и не следует этими нововведениями пренебрегать. Если же PHP 5.6.* не подходит, то, как минимум обновится до PHP 5.5 или PHP5.5. Версия PHP 5.3 была выпущена почти 4 года назад, она медленнее и потребляет больше памяти, чем новые версии PHP. Установить один из предкомпиляторов PHP.Настройка предкомпиляторов PHP:
PHP - движок, который запускает код приложений. Необходимо установить только те модули, которые планируются использоваться для выполнения скриптов, и сконфигурировать веб-сервер apache для использования PHP только для файлов скриптов (обычно те файлы, названия которых заканчиваются на .php), а не всех статических файлов. Кэширование кода операции: Когда запрашивается скрипт PHP, PHP читает скрипт и собирает его в то, что называется код операции Zend, бинарное представление кода, который будет выполнен. Этот код операции затем выполняется движком PHP и теряется. Кэширование кода операции сохраняет его и в следующий раз при запросе страницы вновь использует, это экономит немало времени. Акселератор PHP — расширение для PHP, основное назначение которого - увеличение производительности интерпретатора при обработке сценариев путем кэширования их байт-кода. Как выглядит обработка сценария на PHP обычным интерпретатором:
Чтение файла. Генерация байт кода. Выполнение кода. Выдача результата.Дело в том, что при выполнении стандартного обращения к PHP скрипту, каждый раз он компилируется заново. То есть, одна и та же работа делается несколько раз. Если это маленький проект, замедления в работе могут быть незначительными, даже невидимыми. Но если у вас большой проект (сайт), то вы замечали, что при обращении идет задержка загрузки страницы, несмотря на то, что сайт хорошо оптимизирован, в плане сжатия html и сжатия css. Как выглядит обработка сценария на PHP с использованием кэширования:
Чтение файла. Проверка, есть ли кэш для файла (создан или истекло время хранения). Если есть, отдается кэшированный контент. Если нет, то создается кэш и выдается его содержимое.Существующие решения
APC — хранение данных передается APC, при этом данные хранятся в памяти; XCache — хранение данных передается XCache, при этом данные хранятся в памяти; eAccelerator — хранение данных передается eAccelerator, при этом данные хранятся в памяти или в файлах на диске. Memcached – оперативная в оперативной памяти.APC XCache eAccelerator:
Недостаток 1: использует общую для скриптов и кэша память.
Недостаток 2: при кэшировании требуется сериализация данных.Alternative PHP Cache (APC)
Смотрите так же:The Alternative PHP Cache — бесплатный и открытый opcode кэшер для PHP. Он был задуман, как бесплатный, открытый и стабильный фреймворк для кэширования и оптимизации исходного кода PHP, так же возможно кэширование пользовательских данных. Проект живет и развивается. Поддерживает PHP4 и PHP5, включая 5.3 и 5.4. Это расширение PECL не поставляется вместе с PHP. После установки акселератора APC, схема выполнения запроса будет следующей: Применение APC для PHP:
Установка APC
Для начала надо установить необходимые пакеты:
# apt-get install apache2-threaded-dev php5-dev php5-pear make gcc g++Затем установить APC при помощи pecl:
# pecl install apcОтредактировать конфигурационный файл:
#vi /etc/php5/apache2/php.iniДобавить в него следующую строку:
extension = apc.so apc.shm_size = 64 //Количество выделяемой оперативной памяти в МБ. apc.enabled=1 //APC включен. Довольно очевидная настройка, но очень важная. //Отключение APC может привести к уменьшению производительности на рабочем сервере.apc.shm_segments=1 apc.shm_size=32Эти настройки показывают сколько памяти выделять под APC. APC.shm_segments=1 - показывает что выделяется один сегмент памяти, а apc.shm_size=32 показывает, что размер этого сегмента 32 мегабайта. Вы можете поменять размер сегмента, скажем на 64 мегабайта и перезапустить Apache. Потом если количество MISS не будет сведено к 1% сделать размер 128 МБ и так далее. Это основной параметр для работы с APC.
apc.cache_by_default=1apc.filters= Работа APC для всех php скриптов. При этом мы можем закомментировать строчку с apc.filters. apc.stat=1Этот параметр напрямую влияет на производительность. При включенной настройке кэш в APC остается там пока не будет удален. В случае когда настройка отключена, то APC будет сравнивать время выполнения скрипта и время последнего изменения файла и добавлять в кэш новую версию. Эта настройка необходима для рабочего сервера, однако для разработки эту настройку лучше всего отключить. И еще при включенной настройке apc.stat необходимо очистить кэш APC при обновление модулей и ядра Drupal.apc.ttl=0Эта настройка показывает через сколько миллисекунд очистить кэш. При 0 кэш не очищается. Поэтому мы ставим 0, мы же не хотим чтобы каждый час нужный нам кэш очищался (по умолчанию 7200, то есть 2 часа).
apc.num_files_hint=2048Эта настройка может быть очень нужна, когда на сервере несколько сайтов, несколько Drupal. Потому что один Drupal может забивать в кэш более 500 файлов. Чтобы кэш одного сайта не затирал в кэше файлы другого, лучше включить эту настройку побольше (по умолчанию 1024). Для вступления настроек в силу необходимо перезапустить веб-сервер.
#/etc/init.d/apache2 restart
Zend OPcache
Zend OPcache — это предкомпилятор PHP кода, разработкой которого занимается команда PHP. Начиная с PHP версии 5.5 он включен в основной пакет расширений PHP, на для более ранних версий его нужно устанавливать отдельно. Установка:
Для установки в PHP 5.5 - 5.6, требуется отредактировать php.ini для вашего сайта, например:
vi /etc/php.iniНайти позицию zend_extension и указать путь к opcache.so и указать минимальные параметры, например:
zend_extension=/usr/lib64/php/modules/opcache.soПример конфигурации:
zend_extension=/usr/lib64/php/modules/opcache.so opcache.enable_cli=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 opcache.fast_shutdown=1После выполненных действий перезапустить веб-сервер:
/etc/init.d/httpd restart /etc/init.d/apache2 restartРекомендованные минимальные параметры:
opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 opcache.fast_shutdown=1 opcache.enable_cli=1Основные параметры Zend Opcache по параметрам:
Включение/выключение OPcache. В выключенном состоянии код не оптимизируется и не кэшируется. Значение по умолчанию «1».
opcache.enable=1Включение OPcache для CLI-версии PHP. Наилучшим образом подходит для тестирование и отладки. Значение по умолчанию «0».
opcache.enable_cli=0Размер используемой памяти для хранения предкомпилированного PHP-кода. Размер указывается в мегабайтах. Значение по умолчанию «64».
opcache.memory_consumption=64Количество памяти для пула строк в мегабайтах. Значение по умолчанию «4».
opcache.interned_strings_buffer=4Максимальное количество ключей (скриптов) в хэш-таблице OPcache. Число должно быть простым и быть больше, чем те, что приведены в примере:{ 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987, 262237, 524521, 1048793 }. Допустимы числа между 200 и 1000000. Значение по умолчанию «2000».
opcache.max_accelerated_files=2000Максимальный процент “замусоренной” памяти для запланированного перезапуска. Значение по умолчанию «5».
opcache.max_wasted_percentage=5При включении этого параметра, OPcache добавляет текущую рабочую директорию в ключ скрипта для предотвращения возникновения коллизий между файлами с одинаковым именем. Выключение этой функции увеличивает производительность, но может нарушить работу приложений. Значение по умолчанию «1».
opcache.use_cwd=1При отключенном параметре, появляется возможность обнуления OPcache вручную или перезапуском веб-сервера для того, чтобы привести в актуальное состояние данных об изменениях в файлах. Частота проверки управляется параметром «opcache.revalidate_freq». Значение по умолчанию «1».
opcache.validate_timestamps=1Через какой промежуток времени (в секундах) проверять изменения временных меток для поддержания данных в памяти в актуальном состоянии. (“1” означает проверку с периодичностью раз в секунду для запроса, “0” - постоянная проверка). Значение по умолчанию «2».
opcache.revalidate_freq=2Предотвращает кэширование файлов, которые были изменены меньше, чем в указанное время (в секундах). Эта возможность защищает не полностью обновленные файлы от кэширования. В случае мгновенного обновления всех файлов, для увеличения производительности установите параметр равный “0”. Значение по умолчанию «2».
opcache.file_update_protection=2Включение или отключение оптимизации поиска файлов в include_path. Если поиск файлов выключен и будет найден закэшированный файл, используемый в include_path, файл не будет найден повторно. Таким образом, если файл с именем, попадающийся где-либо еще в include_path, он не будет найден. Включайте этот параметр только в случае, если это действительно принесет ожидаемый эффект ускорения. По умолчанию возможность отключена, т.е. оптимизация активирована. Значение по умолчанию «0».
opcache.revalidate_path=0Если выключено, все комментарии PHPDoc будут удалены из кода с целью уменьшения размера оптимизированного кода. Отключение параметра может вызвать некорректную работу некоторых приложений или фреймворков (к примеру, Doctrine, ZF2, PHPUnit). Значение по умолчанию «1»
opcache.save_comments=0Если выключено, комментарии PHPDoc не будут загружаться из общей памяти. При включении вывода, комментарии будут сохранятся, но выводиться приложениями только в случае надобности. Значение по умолчанию «1».
opcache.load_comments=1Если включено, будет использоваться последовательность быстрых выключений для оптимизированного кода. Эта возможность не освобождает каждый используемый блок памяти, но позволяет работать Zend Engine Memory Manager. Значение по умолчанию «0».
opcache.fast_shutdown=0При включении OPcache будет проверять наличие закешированного файла при вызовах file_exists(),is_file() и is_readable(). Это может увеличить скорость работы в приложениях, которые проверяют расширение и читабельность PHP-скриптов, но появляется риск вывода устаревших данных в случае отключения параметра opcache.validate_timestamps. Значение по умолчанию «0».
opcache.enable_file_override=0Маска битности, в которой каждый бит включает или отключает в соответствующие проходы OPcache. Значение по умолчанию «0xffffffff».
opcache.optimization_level=0xffffffffВключение этого хака в качестве рабочего окружения при ошибках вида «can't redeclare class». По умолчанию возможность отключена, т.е. оптимизация активирована. В php-5.3 и выше этот хак более не требуется и изменение параметра ни коим образом не скажется на работе. Значение по умолчанию «1».
opcache.inherited_hack=1Включайте этот параметр только при появлении ошибок вида «Cannot redeclare class». значение по умолчанию «0».
opcache.dups_fix=0Месторасположение списка файлов, к которым запрещен доступ для OPcache (поддерживаются маски). Каждый такой файл является текстовым файлом, в котором хранятся имена файлов, которые не требуется кэшировать.Формат файла предусматривает размещение каждого имени файла в отдельной строке. Имя файла может содержать полный путь, либо префикс (к примеру /var/www/x укажет на все файлы в директориях, начинающихся на ‘x’.
opcache.blacklist_filenameСтроки, начинающиеся с “;” игнорируются (комментарии). Обычно, блокируют файлы следующих типов:
Директории, в которых содержатся автоматически генерирующиеся файлы с кодом (к примеру кэш Smarty или ZFW фреймворков). Код, который не работает при кэшировании/оптимизации. Код, который не отображается по причине ошибок в OPcache.Позволяет исключать большие файлы из кэширования. По умолчанию кэшируются все файлы. Значение по умолчанию «0».
opcache.max_file_size=0Проверять контрольную сумму кэша каждое N-ое количество запросов. По умолчанию параметр имеет значение равное нулю, что означает отключение проверки. Подсчет контрольной суммы снижает производительность, этот параметр следует включать только если требуется отладка. Значение по умолчанию «0».
opcache.consistency_checks=0Какое время ожидать (а секундах) перед запланированной перезагрузкой в случае недоступности кэша. OPcache использует этот параметр для определения ситуации появления возможных проблем. После истечение срока ожидания OPcache перезапускает процессы, которые были все это время заблокированы. Если уровень журналирования выставлен “3” (параметр opcache.log_verbosity_level) или выше, то в логи веб-сервера будет произведена запись “killed locker”. Значение по умолчанию «180».
opcache.force_restart_timeout=180Определение названия и местоположения лога ошибок OPcache. При пустом значении ошибки выводятся в консоль.
opcache.error_logВсе ошибки OPcache отправлять в лог-файл лог-файл веб-сервера. По умолчанию, журналируются только критические ошибки (level 0) или обычные ошибки (level 1). Так же можно включить выводит предупреждений (level 2), информационных сообщений (level 3) или отладочную информацию (level 4). Значение по умолчанию «1».
opcache.log_verbosity_level=1Предпочитаемый бэк-энд общей памяти. Можно оставить пустым и позволить системе самой разобраться.
opcache.preferred_memory_modelЗащите общей памяти от несанкционированной записи во время выполнения скрипта. Полезно только для отладки. Значение по умолчанию «0».
opcache.protect_memory=0Разрешение вызова API-функций OPcache из PHP-скриптов, путь к которым начинается тем, что указано в строке. По умолчанию пустое значение означает запрет на всё. Значение по умолчанию «»
opcache.restrict_apiМаппирование основных сегментов памяти (только для Windows). Все процессы PHP маппируются в общей памяти в некотором адресном пространстве. Этот параметр позволяет вручную исправить ошибки вида «Unable to reattach to base address».
opcache.mmap_base
Добавить в избранное Распечатать статью
Powered by WHMCompleteSolution