Инструкция по настройке кеширования
Использование кеширования в оперативной памяти
В версии 8.5.1 главного модуля появилась поддержка кеширования не только на диск, но и в разделяемую память.
Акселераторы PHP поддерживают API работы с разделяемой памятью. Это значит, что все процессы веб-сервера могут читать и писать в общее адресное пространство. Это позволяет организовать совместно используемый синхронный кеш.
Хотя данные приложения, кешированные в файл, кешируются на уровне файловой системы, бывают ситуации (например: резервное копирование) когда этот кеш вытесняется и становится не эффективным для использования.
Преимуществом разделяемого кеша акселераторов является его нахождение в оперативной памяти. Использование свопинга говорит о неадекватной настройке хостинга. Недостаток своп-файла - его полный сброс при перезапуске веб-сервера.
PHP приложения
Программа | Описание | Версия |
---|---|---|
APC | Использует уже имеющиеся механизмы разделяемой памяти. Предоставляя PHP программисту функции apc_fetch, apc_store и apc_delete.
|
|
eAccelerator | При сборке расширения необходимо указать "--with-eaccelerator-shared-memory". Имеет те же недостатки, что и APC. Достоинство: есть возможность настроить сохранение кеша на диск.
Примечание. eAccelerator не совместим с PHP версий выше 5.3
|
Не поддерживается с версии 15.5.0 |
Демон memcached
Кроме акселераторов, схожим, но гораздо более богатым функционалом обладает демон memcached.
Это отдельный процесс использующий для коммуникаций протокол TCP/IP, который может поддерживать распределенный, разделяемый, синхронный кеш. К серверу, на котором запущен memcached, можно подключить более одного веб-сервера. Использование memcached решает проблемы кеша акселераторов, но на первое место выходит штраф производительности из-за транспорта протокола.
Пример работы с memcached на Ubuntu. Установка:
aptitude install memcached
Настройки демона хорошо документированы и расположены файле /etc/memcached.conf
Запуск демона:
/etc/init.d/memcached start
Для PHP имеется три расширения для работы с сервером memcached. На данный момент "1С-Битрикс: Управление сайтом" поддерживает расширение memcache. При этом при использовании memcache к нему можно подключиться через unixsocket:
define("BX_MEMCACHE_HOST", "unix:///path/to/memcached.sock"); define("BX_MEMCACHE_PORT", "0");
Однако предварительно нужно настроить memcached для работы через сокеты. Для этого необходимо в файле настройки memcached изменить сточку OPTIONS="" на OPTIONS="-s /tmp/memcached.sock -a 00755". И только после этого вносить изменения в dbconn.php.
Настройка Битрикса
Управление кешем реализуется через константы определяемые в файле dbconn.php (В версии ядра выше 14.0 настройки производятся в других файлах).
Константа | Описание |
---|---|
BX_CACHE_TYPE | Самая важная из всех. Может принимать следующие значения:
Пример: define("BX_CACHE_TYPE", "memcache"); |
BX_CACHE_SID | Обязательно определять, если на одном сервере запущено более одного экземпляра "1С-Битрикс: Управление сайтом". Это соль которая будет подмешана ко всем ключам кеша. И позволит им "не перепутаться".
Пример: define("BX_CACHE_SID", $_SERVER["DOCUMENT_ROOT"]."#01"); |
BX_MEMCACHE_HOST | Необходима только при использовании memcache. В ней определяется адрес сервера на котором запущен демон memcached.
Пример: define("BX_MEMCACHE_HOST", "192.168.0.43"); |
BX_MEMCACHE_PORT | Не обязательная, по умолчанию принимает значение 11211. |
Антон Долганин
|
||
| ||
Антон Долганин
|
||
И обратно - если на одной копии продукта размещено несколько сайтов, для всех них значение должно быть одинаковое. Иначе, кеш, созданный на одном сайте коробки не будет виден на другом сайте. Это критично для COption, кеш которой должен быть общим для все сайтов. | ||
Игорь Андрианов
|
Коллеги, если вы переносите локально настроенный сервер с одного IP на другой IP (например, VPS от одного хостера к другому или просто железо из офиса в д/ц) и у вас используется MEMCACHE, пожалуйста, НЕ ЗАБУДЬТЕ ПОМЕНЯТЬ IP адрес в параметре BX_MEMCACHE_HOST на новый !!!
[FONT=Verdana, Tahoma, Arial, Helvetica, sans-serif]Иначе будите как мы возить его туда-сюда: [/FONT] |
Александр Демчишин
|
1. не забудьте для ubuntu поставить php расширение memcache (без d), иначе битрикс не увидит memcached, команда: sudo apt-get install php5-memcache
2. и здесь если сайт на localhost: define("BX_MEMCACHE_HOST", "127.0.0.1"); 3. файл dbconn.php находится по адресу bitrix/php_interface 4. затем перезапуск memcached и apach: sudo /etc/init.d/memcached restart sudo /etc/init.d/apache2 restart |
Сергей Ковалев
|
Следует также учитывать, что при использовании FastCGI у каждого процесса PHP будет свой кэш APC/eAccelerator, что приведет одновременно к многократному кэшированию одних и тех же данных и "странному" поведению продукта.
Проблема может быть решена передачей управления потомками самому PHP (через опцию PHP_FCGI_CHILDREN), что не рекомендуется, так как сам PHP имеет гораздо меньше возможностей по управлению потомками. Также использование PHP_FCGI_CHILDREN в mod_fcgid (но не в mod_fastcgi) может значительно ограничить производительность, т.к. mod_fcgid одновременно передает только один запрос процессу PHP, независимо от количества его потомков. Таким образом, при использовании FastCGI разумным выбором будут изначально разделяемые кэши — в файлах или memcached. |
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.