Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

каталог_статей:веб-окружение:оптимизация_php [2015/08/27 12:14]
каталог_статей:веб-окружение:оптимизация_php [2022/04/01 15:08] (текущий)
Строка 1: Строка 1:
 +====== Оптимизация php ======
 +Применимость: Apache, PHP, CGI, FastCGI
  
 +Слова для поиска: апач, вэб-сервер, кэширование
 +
 +----
 +===== Задача: =====
 +Увеличение производительности сайта.
 +===== Решение: =====
 +Для увеличения производительности и скорости работы веб-приложения можно произвести оптимизацию PHP, который отвечает за динамическую составляющую сайта.
 +Для этого можно перевести интерпретатор PHP в один из 3 режимов работы:
 +  - PHP как модуль Apache 
 +  - PHP как CGI, 
 +  - PHP как FastCGI
 +  
 +===== PHP как модуль 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.png?nolink&640 |}}
 +
 +===== Установка APC =====
 +
 +Для начала надо установить необходимые пакеты:
 +<code> # apt-get install apache2-threaded-dev php5-dev php5-pear make gcc g++ </code>
 +
 +Затем установить APC при помощи pecl:
 +
 +<code> # pecl install apc </code>
 +
 +Отредактировать конфигурационный файл:
 +
 +<code> #vi /etc/php5/apache2/php.ini </code>
 +
 +Добавить в него следующую строку:
 +
 +<code>extension = apc.so
 +apc.shm_size = 64 Количество выделяемой оперативной памяти в МБ.
 +apc.enabled=1 APC включен. Довольно очевидная настройка, но очень важная. 
 +Отключение APC может привести к уменьшению производительности на рабочем сервере.</code>
 +<code>apc.shm_segments=1
 +apc.shm_size=32</code>
 +
 +Эти настройки показывают сколько памяти выделять под APC. APC.shm_segments=1 - показывает что выделяется один сегмент памяти, а apc.shm_size=32 показывает, что размер этого сегмента 32 мегабайта. Вы можете поменять размер сегмента, скажем на 64 мегабайта и перезапустить Apache. Потом если количество MISS не будет сведено к 1% сделать размер 128 МБ и так далее. Это основной параметр для работы с APC.
 +
 +<code>apc.cache_by_default=1</code>
 +
 +<code>apc.filters= Работа APC для всех php скриптов. При этом мы можем закомментировать строчку с apc.filters.
 +
 +apc.stat=1</code>
 +Этот параметр напрямую влияет на производительность. При включенной настройке кэш в APC остается там пока не будет удален. В случае когда настройка отключена, то APC будет сравнивать время выполнения скрипта и время последнего изменения файла и добавлять в кэш новую версию. Эта настройка необходима для рабочего сервера, однако для разработки эту настройку лучше всего отключить. И еще при включенной настройке apc.stat необходимо очистить кэш APC при обновление модулей и ядра Drupal.
 +
 +<code>apc.ttl=0</code>
 +
 +Эта настройка показывает через сколько миллисекунд очистить кэш. При 0 кэш не очищается. Поэтому мы ставим 0, мы же не хотим чтобы каждый час нужный нам кэш очищался (по умолчанию 7200, то есть 2 часа).
 +
 +<code> apc.num_files_hint=2048</code>
 +
 +Эта настройка может быть очень нужна, когда на сервере несколько сайтов, несколько Drupal. Потому что один Drupal может забивать в кэш более 500 файлов. Чтобы кэш одного сайта не затирал в кэше файлы другого, лучше включить эту настройку побольше (по умолчанию 1024).
 +Для вступления настроек в силу необходимо перезапустить веб-сервер.
 +
 +<code> #/etc/init.d/apache2 restart </code>
 +
 +
 +
 +
 +
 +
 +
 +=====Zend OPcache =====
 +Zend OPcache — это предкомпилятор PHP кода, разработкой которого занимается команда PHP. Начиная с PHP версии 5.5 он включен в основной пакет расширений PHP, на для более ранних версий его нужно устанавливать отдельно.
 +Установка:
 +
 +Для установки в PHP 5.5 - 5.6, требуется отредактировать php.ini для вашего сайта, например:
 +<code> vi /etc/php.ini </code>
 +
 +Найти позицию zend_extension и указать путь к opcache.so и указать минимальные параметры, например: <code> zend_extension=/usr/lib64/php/modules/opcache.so </code> 
 +
 +<code | Пример конфигурации:>
 +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 </code>
 +
 +После выполненных действий перезапустить веб-сервер:
 +
 +<code>/etc/init.d/httpd restart
 +/etc/init.d/apache2 restart </code>
 +
 +<code | Рекомендованные минимальные параметры:>
 +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 </code>
 +
 +
 +===== Основные параметры Zend Opcache по параметрам: =====
 +
 +
 +Включение/выключение OPcache. В выключенном состоянии код не оптимизируется и не кэшируется. Значение по умолчанию "1".
 +<code> opcache.enable=1 </code>
 + 
 +Включение OPcache для CLI-версии PHP. Наилучшим образом подходит для тестирование и отладки. Значение по умолчанию "0".
 +<code> opcache.enable_cli=0 </code>
 +
 +Размер используемой памяти для хранения  предкомпилированного PHP-кода. Размер указывается в мегабайтах.
 +Значение по умолчанию "64".
 +<code> opcache.memory_consumption=64 </code>
 +
 +Количество памяти для пула строк в мегабайтах. Значение по умолчанию "4".
 +<code> opcache.interned_strings_buffer=4 </code>
 +
 +Максимальное количество ключей (скриптов) в хэш-таблице OPcache. Число должно быть простым и быть больше, чем те, что приведены в примере:{ 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987, 262237, 524521, 1048793 }. Допустимы числа между 200 и 1000000. Значение по умолчанию "2000".
 +<code> opcache.max_accelerated_files=2000 </code>
 +
 +Максимальный процент “замусоренной” памяти для запланированного перезапуска. Значение по умолчанию "5".
 +<code> opcache.max_wasted_percentage=5 </code>
 +
 +При включении этого параметра, OPcache добавляет текущую рабочую директорию в ключ скрипта для предотвращения возникновения коллизий между файлами  с одинаковым именем. Выключение этой функции увеличивает производительность, но может нарушить работу приложений. Значение по умолчанию "1".
 +<code> opcache.use_cwd=1 </code>
 +
 +При отключенном параметре, появляется возможность обнуления OPcache вручную или перезапуском веб-сервера для того, чтобы привести в актуальное состояние данных об изменениях в файлах. Частота проверки управляется параметром "opcache.revalidate_freq". Значение по умолчанию "1".
 +<code> opcache.validate_timestamps=1 </code>
 +
 +Через какой промежуток времени (в секундах) проверять изменения временных меток для поддержания данных в памяти в актуальном состоянии. (“1” означает проверку с периодичностью раз в секунду для запроса, “0” - постоянная проверка). Значение по умолчанию "2".
 +<code> opcache.revalidate_freq=2 </code>
 + 
 +Предотвращает кэширование файлов, которые были изменены меньше, чем в указанное время (в секундах). Эта возможность защищает не полностью обновленные файлы от кэширования. В случае мгновенного обновления всех файлов, для увеличения производительности установите параметр равный “0”. Значение по умолчанию "2".
 +<code> opcache.file_update_protection=2 </code>
 +
 +Включение или отключение оптимизации поиска файлов в include_path. Если поиск файлов выключен и будет найден закэшированный файл, используемый в include_path, файл не будет найден повторно. Таким образом, если файл с именем, попадающийся где-либо еще в include_path, он не будет найден. Включайте этот параметр только в случае, если это действительно принесет ожидаемый эффект ускорения. По умолчанию возможность отключена, т.е. оптимизация активирована. Значение по умолчанию "0".
 +<code> opcache.revalidate_path=0 </code>
 +
 +Если выключено, все комментарии PHPDoc будут удалены из кода с целью уменьшения размера оптимизированного кода. Отключение параметра может вызвать некорректную работу некоторых приложений или фреймворков (к примеру, Doctrine, ZF2, PHPUnit). Значение по умолчанию "1"
 +<code> opcache.save_comments=0 </code>
 +
 +Если выключено, комментарии PHPDoc не будут загружаться из общей памяти. При включении вывода, комментарии будут сохранятся, но выводиться приложениями только в случае надобности. Значение по умолчанию "1".
 +<code> opcache.load_comments=1 </code>
 +
 +Если включено, будет использоваться последовательность быстрых выключений для оптимизированного кода. Эта возможность не освобождает каждый используемый блок памяти, но позволяет работать Zend Engine Memory Manager. Значение по умолчанию "0".
 +<code> opcache.fast_shutdown=0 </code>
 + 
 +При включении OPcache будет проверять наличие закешированного файла при вызовах file_exists(),is_file() и is_readable(). Это может увеличить скорость работы в приложениях, которые проверяют расширение и читабельность PHP-скриптов, но появляется риск вывода устаревших данных в случае отключения параметра opcache.validate_timestamps. Значение по умолчанию "0".
 +<code> opcache.enable_file_override=0 </code>
 +
 +Маска битности, в которой каждый бит включает или отключает в соответствующие проходы OPcache. Значение по умолчанию "0xffffffff".
 +<code> opcache.optimization_level=0xffffffff </code> 
 + 
 +Включение этого хака в качестве рабочего окружения при ошибках вида "can't redeclare class".
 +По умолчанию возможность отключена, т.е. оптимизация активирована. В php-5.3 и выше этот хак более не требуется и изменение параметра ни коим образом не скажется на работе. Значение по умолчанию "1".
 +<code> opcache.inherited_hack=1 </code>
 +
 +Включайте этот параметр только при появлении ошибок вида "Cannot redeclare class". значение по умолчанию "0".
 +<code> opcache.dups_fix=0 </code>
 +
 +
 +
 +
 +
 +
 +Месторасположение списка файлов, к которым запрещен доступ для OPcache (поддерживаются маски). Каждый такой файл является текстовым файлом, в котором хранятся имена файлов, которые не требуется кэшировать.Формат файла предусматривает размещение каждого имени файла в отдельной строке. Имя файла может содержать полный путь, либо префикс (к примеру /var/www/x укажет на все файлы в директориях, начинающихся на ‘x’. 
 +<code> opcache.blacklist_filename </code>
 +
 +Строки, начинающиеся с “;” игнорируются (комментарии). Обычно, блокируют файлы следующих типов:
 +  - Директории, в которых содержатся автоматически генерирующиеся файлы с кодом (к примеру кэш Smarty или ZFW фреймворков).
 +  - Код, который не работает при кэшировании/оптимизации.
 +  - Код, который не отображается по причине ошибок в OPcache.
 +
 +Позволяет исключать большие файлы из кэширования. По умолчанию кэшируются все файлы. Значение по умолчанию "0".
 +<code> opcache.max_file_size=0 </code>
 +
 +Проверять контрольную сумму кэша каждое N-ое количество запросов. По умолчанию параметр имеет значение равное нулю, что означает отключение проверки. Подсчет контрольной суммы снижает производительность, этот параметр следует включать только если требуется отладка. Значение по умолчанию "0".
 +<code> opcache.consistency_checks=0 </code>
 +
 +Какое время ожидать (а секундах) перед запланированной перезагрузкой в случае недоступности кэша.
 +OPcache использует этот параметр для определения ситуации появления возможных проблем. После истечение срока ожидания OPcache перезапускает процессы, которые были все это время заблокированы. Если уровень журналирования выставлен “3”  (параметр opcache.log_verbosity_level) или выше, то в логи веб-сервера будет произведена запись “killed locker”. Значение по умолчанию "180".
 +<code> opcache.force_restart_timeout=180 </code> 
 +
 +Определение названия и местоположения лога ошибок OPcache. При пустом значении ошибки выводятся в консоль.
 +<code> opcache.error_log </code>
 +
 +Все ошибки OPcache отправлять в лог-файл лог-файл веб-сервера. По умолчанию, журналируются только критические ошибки (level 0) или обычные ошибки (level 1). Так же можно включить выводит предупреждений (level 2), информационных сообщений (level 3) или отладочную информацию (level 4). Значение по умолчанию "1".
 +<code> opcache.log_verbosity_level=1 </code>
 +
 +Предпочитаемый бэк-энд общей памяти. Можно оставить пустым и позволить системе самой разобраться.
 +<code> opcache.preferred_memory_model </code>
 +
 +Защите общей памяти от несанкционированной записи во время выполнения скрипта. Полезно только для отладки. Значение по умолчанию "0".
 +<code> opcache.protect_memory=0 </code>
 +
 +Разрешение вызова API-функций OPcache из PHP-скриптов,  путь к которым начинается тем, что указано в строке. По умолчанию пустое значение означает запрет на всё. Значение по умолчанию ""
 +<code> opcache.restrict_api </code>
 +
 +Маппирование основных сегментов памяти (только для Windows). Все процессы PHP маппируются в общей памяти в некотором адресном пространстве. Этот параметр позволяет вручную исправить ошибки вида "Unable to reattach to base address".
 +<code> opcache.mmap_base </code>
 +
 +
 +
 +
 +===== eAccelerator =====
 +
 +eAccelerator - это свободный opensource-проект, выполняющий роли акселератора, оптимизатора и распаковщика. Также встроены функции динамического кэширования контента. eAccelerator повышает производительность работы PHP-скриптов за счет кэширования скомпилированного байт-кода, таким образом издержки на процесс компиляции ликвидируются. Также он оптимизирует скрипты для ускорения времени их исполнения. eAccelerator обычно снижает нагрузку на сервер и увеличивает скорость работы php кода в 1-10 раз.
 +eAccelerator сохраняет скомпилированый PHP-код сначала в общей памяти, затем на диске, все время поддерживая размер занятой памяти оптимальным для производительной работы приложений.
 +Поддерживает PHP4 и PHP5, включая 5.3.
 +
 +===== Установка eAccelerator: =====
 +
 +<code> #apt-get install php5-dev </code>
 +Загрузите архив с исходными кодами eAccelerator:
 +
 +<code> #wget http://bart.eaccelerator.net/source/0.9.5/eaccelerator-0.9.5.tar.bz2 </code>
 +Распаковка архива:
 +<code> #tar jxvf eaccelerator-0.9.5.tar.bz2
 +#cd eaccelerator-0.9.5 </code>
 +Далее необходимо запустить phpize для создания config-файлов, необходимых для сборки:
 +<code>#phpize
 +#./configure –enable-eaccelerator=shared –with-php-config=/usr/bin/php-config
 +#make
 +#make install
 +cp modules/eaccelerator.so path-to-php/lib/php/extensions/no-debug-non-zts-xxxxxxxx/</code>
 +Акселератор установлен.
 +
 +Теперь необходимо отредактировать файл path-to-php.ini/php.ini для пользователей php и добавить в него следующие параметры для подключения расширения:
 +
 +<code> #vi path-to-php/php.ini
 +extension=”eaccelerator.so”
 +eaccelerator.shm_size=”16″
 +eaccelerator.cache_dir=”/tmp/eaccelerator”
 +eaccelerator.enable=”1″
 +eaccelerator.optimizer=”1″
 +eaccelerator.check_mtime=”1″
 +eaccelerator.debug=”0″
 +eaccelerator.filter=””
 +eaccelerator.shm_max=”0″
 +eaccelerator.shm_ttl=”0″
 +eaccelerator.shm_prune_period=”0″
 +eaccelerator.shm_only=”0″
 +eaccelerator.compress=”1″
 +eaccelerator.compress_level=”9″
 +</code>
 +<code | Максимальный размер кэша в мегабайтах:> eaccelerator.shm_size="512" </code>
 +<code | Корневой каталог для хранения кэша:> eaccelerator.cache_dir="/var/cache/eaccelerator" </code>
 +<code | Включение акселератора:> eaccelerator.enable="1" </code>
 +<code | Подключить или отключить встроенный оптимайзер, которые увеличивает скорость выполнения кода:>eaccelerator.optimizer="1" </code> 
 +<code | Включает проверку модификации PHP файлов:> eaccelerator.check_mtime="1" </code> 
 +<code | Режим отладки. Если поставить 1 или вообще забыть упомянуть этот параметр, при большой посещаемости загадит логи Apache за считанные часы:> eaccelerator.debug="0" </code> 
 +<code | Здесь можно определить можно определить, какие файлы должны быть кэшированы. По-умолчанию, если здесь ничего не указано, то кэшируются все файлы:> eaccelerator.filter="" </code> 
 +<code | Максимально допустимое значение которое может быть отправлено в разделяемую память. По-умолчанию, "ноль" - без ограничений. Размер указывается в байтах, но можно указать приставки, например: 10240, 10K, 1M:> eaccelerator.shm_max="0" </code> 
 +<code | Когда акселератору потребуется отправить в разделяемую память какой-то объект и при этом в памяти для этого не окажется места, он попытается удалить файлы, которые не были запрошены в течении последних "shm_ttl" секунд. По-умолчанию, это значение равно "0" - не удалять ничего:>eaccelerator.shm_ttl="0" </code>
 +<code | Когда акселератору потребуется отправить в разделяемую память какой-то объект и при этом в памяти для этого не окажется места, он попытается удалить старые скрипты, если предыдущие такие попытки были не больше, чем "shm_prune_period" секунд назад.По-умолчанию, это значение равно "0" - не удалять ничего:> eaccelerator.shm_prune_period="0" </code> 
 +<code | Включить или отключить кэширование скомпилированных скриптов _только_ на диск. Этот параметр не влияет на данные сессий и кэширование контента. По-умолчанию, значение 0, означает, что данные будут кэшироваться и в памяти и на диске:> eaccelerator.shm_only="0" </code> 
 +<code | Включить или отключить сжатие закэшированного контента. По-умолчанию, "1" - сжимать:> eaccelerator.compress="0" </code>
 +<code | Уровень сжатия. По-умолчанию, "9" - максимум:> eaccelerator.compress_level="3" </code> 
 +
 +**Создание cache-директории.** Последний важный шаг в настройке акселератора - это создание директории для кэша, имя которой мы задавали в конфигурационном файле. Значение по умолчанию - /tmp/eaccelerator, потому что права на запись в папку /tmp обычно есть у всех пользователей
 +
 +Не очень хорошим решением будет оставлять права на запись для всех пользователей. Более безопасным будет сменить владельца директории eaccelerator на пользователя, от имени которого запущен PHP (в большинстве случаев это web-сервер. Например apache или lighttpd) и установить на нее права 0644
 +<code>
 +#mkdir /tmp/eaccelerator
 +#chown nobody:nobody /tmp/eaccelerator (либо указать пользователя PHP вместо nobody)
 +#chmod 0644 /tmp/eaccelerator </code>
 +
 +Для вступления настроек в силу необходимо перезагрузить web-сервер. 
 +<code> #/etc/init.d/apache2 restart </code>
 +На этом настройка eAccelerator закончена
 +Если при доступе к созданному файлу с кодом:
 +<code> <?php
 +phpinfo();
 +?> </code>
 +видно информацию о eAccelerator, то все установлено корректно.
 +
 +===== Xcache =====
 +
 +Поддерживает функции оптимизации скриптов, кэширования байт-кода в оперативную память, кэширования пользовательских данных в shared memory, простого профилирования работы скриптов. Имеет собственный GUI, наличие и использование которого, однако, не обязательно для функционирования пакета. Бесплатен. 
 +XCache решает большинство проблем, которые присутствуют у других акселераторов. Например, возможность использования с более новыми версиями PHP.
 +Проект живет и развивается. Поддерживает PHP4 и PHP5, включая 5.5.
 +Xcache очень агрессивно кэширует байт-код php и после того как он был закэширован в памяти, оптимизатор попросту перестаёт проверять (или делает это крайне редко) был ли оригинальный скрипт изменён на диске. Это приводит к тому, что если работает xcache и вы отредактировали свой php файл, то изменения в работе скрипта вы увидите далеко не сразу, т.к. xcache попросту не подгрузит их из файла и не скомпилирует, а просто подставит данные из кэша.
 +Его версии выходят чаще, а так же его обещают включить в стандартную поставку php6
 +
 +===== Установка XCache =====
 +Для установки необходимо выполнить:
 +<code> #apt-get install php5-xcache </code>
 +Далее необходимо отредактировать файл /etc/php5/apache2/php.ini и добавить в него следующие значения:
 +<code> extension = xcache.so </code>
 +
 +После установки файл конфигурации в /etc/php5/conf.d/xcache.ini будет выглядеть примерно так:
 +<code> xcache.size = 128M
 +xcache.count = 14
 +xcache.slots = 8K
 +xcache.ttl = 36000
 +xcache.gc_interval = 36000
 +xcache.var_size = 8M
 +xcache.var_count = 14
 +xcache.var_slots = 8K
 +xcache.var_ttl = 36000
 +xcache.var_maxttl = 604800
 +xcache.cacher = On
 +xcache.stat = On </code>
 +
 +Основные параметры:
 +
 +**xcache.siz**e - отвечает за количество памяти для хранения кэша. Если значение будет слишком маленьким, то эффекта от кэширования толком не будет.
 +
 +**xcache.count** — количество блоков, на которые будет делиться кэш. Рекомендуется выставлять по количеству ядер процессора.
 +
 +**xcache.slots** - Количество слотов под кэш, чем больше слотов, тем больше скорость поиска в кэше. Но и увеличивается потребление памяти. Рекомендуется оставлять значение по умолчанию: 8K
 +
 +**xcache.ttl** - Время жизни кэшированного объекта в секундах. Если к объекту никто не обращался в течении указанного времени, объект помечается как не используемый, и в последующем удаляется из кеша сборщиком мусора.
 +
 +**xcache.gc_interval** — интервал запуска сборщика мусора в секундах. Определяет промежуток времени, через который будет запускаться сборщик мусора. Запустившись, он ищет записи с истекшим временем жизни (xcache.ttl) и удаляет их из кэша.
 +
 +После настроек необходимо перезапустить веб-сервер:
 +<code> #/etc/init.d/apache2 restart </code>
 +
 +
 +
 +
 +===== Что такое Memcache и какое отношение он имеет к PHP? =====
 +
 +Memcache разработан для кэширования данных, генерация которых требует большого количества ресурсов. Такого рода данные могут содержать что угодно, начиная с результатов запроса к базе данных и заканчивая тяжеловесным куском шаблона. Memcached не входит в базовый набор модулей, поставляемых с PHP, однако он доступен в репозитории pecl.
 +
 +===== Установка и настройка Memcache: =====
 +
 +Модуль Memcached для PHP доступен в репозитории уже скомпилированным (php5-memcached), но я опишу процесс установки из исходного кода, так как не все репозитории настолько богаты, как дебиановский.
 +
 +<code | Устанавливаем сервер Memcached:>
 +#apt-get install memcached </code>
 +<code | Для начала, хватит следующих правок конфигурационного файла:>
 +#/etc/memcached.conf </code>
 +<code | Memcached будет работать, как демон:>
 +-d </code>
 +<code | Путь для лога:>
 +logfile /var/log/memcached.log </code>
 +
 +<code | Отведём 256 мегабайт ОЗУ под хранилище:>
 +-m 256 <code>
 +<code | Слушать будет этот порт:>
 +-p 11211 </code>
 +<code | В последствии желательно поменять:>
 +-u nobody </code>
 +<code | Слушаем localhost:>
 +-l 127.0.0.1 </code>
 +
 +<code | Перезапускаем memcache> #/etc/init.d/memcached restart
 +# max connection 2048 MAXCONN="2048" # set ram size to 2048 - 2GiB CACHESIZE="4096 </code>
 +
 +<code | Далее проверяем, запустился ли memcached:>
 +# netstat -tap | grep memcached </code>
 +<code | В случае успеха, получим результат:>
 +tcp 0 0 localhost:11211 *:* LISTEN 13036/memcached </code>
 +
 +<code | Компилируем и устанавливаем модуль для PHP:>
 +apt-get install php5-memcached
 +apt-get install php5-dev libmemcache-dev
 +pecl download memcache
 +tar xzvf memcache-2.2.6.tgz
 +cd memcache-2.2.6/
 +phpize && ./configure --enable-memcache && make
 +cp modules/memcache.so /usr/lib/php5/20060613/
 +echo 'extension=memcache.so' >> /etc/php5/apache2/php.ini
 +/etc/init.d/apache2 restart </code>
 +
 +При перезапуске memcached весь кэш теряется.
 +
 +<code | Настройки memcached:>
 +STAT maxbytes 134217728
 +STAT maxconns 1024
 +STAT tcpport 11211
 +STAT udpport 11211
 +STAT inter 127.0.0.1
 +STAT verbosity 0
 +STAT oldest 0
 +STAT evictions on
 +STAT domain_socket NULL
 +STAT umask 700
 +STAT growth_factor 1.25
 +STAT chunk_size 48
 +STAT num_threads 4
 +STAT stat_key_prefix :
 +STAT detail_enabled no
 +STAT reqs_per_event 20
 +STAT cas_enabled yes
 +STAT tcp_backlog 1024
 +STAT binding_protocol auto-negotiate
 +STAT auth_enabled_sasl no
 +STAT item_size_max 1048576 </code>
 +
 +
 +---- 
 +Актуальность: 2015/01/26 10:35 
 +
 +{{tag> Apache CGI FastCGI}}