Установка xcache. XCache — кэширование байткода Основные настройки кэша

08.08.2023

.
Процесс установки очень прост:

# wget http://xcache.lighttpd.net/pub/Releases/1.3.1/xcache-1.3.1.tar.gz
# tar zxf xcache-1.2.2.tar.gz
# cd xcache-1.2.2
# phpize
# ./configure --enable-xcache
# make && make install

Но не обошлось без непредвиденных трудностей. Во-первых, сначала не нашлось phpize . Как выяснилось, надо было поставить пакет php-devel ( #yum install php-devel ). Во-вторых, возникла ошибка на этапе сборки — компилятор ругался на отсутствующий файл заголовка timelib_config.h . После недолгого поиска в Google решение нашлось: в файле /usr/include/php/ext/date/lib/timelib_structs.h нужно было заменить

#include

#include "timelib_config.h"

Дальше сборка и установка прошла без проблем. Оставалось только добавить в /etc/php.ini настройки для XCache (особо не задумываясь, я взял их из статьи, на которую привел ссылку выше, только в строке zend_extension заменил путь на свой: /usr/lib/php/modules/xcache.so ).

После этого проверил работоспособность PHP командой php -m и все заработало!

Дальше оставалось только перезапустить Apache и наслаждаться эффектом. Усилия того стоили: сайты и работать стали быстрее (правда, могу оценить это только субъективно, точных измерений не проводил) и памяти потреблять меньше. В частности, моя TextCMS вместо 320 Kb на страницу стала потреблять всего 120!

Пример настройки параметров:

;; install as zend extension (recommended), normally "$extension_dir/xcache.so"
zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20060613/xcache.so


xcache.admin.enable_auth = On
xcache.admin.user = "mOo"
; xcache.admin.pass = md5($your_password)
xcache.admin.pass = ""


; ini only settings, all the values here is default unless explained
; select low level shm/allocator scheme implemenation
xcache.shm_scheme = "mmap"
; to disable: xcache.size=0
; to enable: xcache.size=64M etc (any size > 0) and your system mmap allows
xcache.size = 32M
; set to cpu count (cat /proc/cpuinfo |grep -c processor)
xcache.count = 1
; just a hash hints, you can always store count(items) > slots
xcache.slots = 8K
; ttl of the cache item, 0=forever
xcache.ttl = 0
; interval of gc scanning expired items, 0=no scan, other values is in seconds
xcache.gc_interval = 0
; same as aboves but for variable cache
xcache.var_size = 0M
xcache.var_count = 1
xcache.var_slots = 8K
; default ttl
xcache.var_ttl = 0
xcache.var_maxttl = 0
xcache.var_gc_interval = 300
xcache.test = Off
; N/A for /dev/zero
xcache.readonly_protection = Off
; for *nix, xcache.mmap_path is a file path, not directory.
; Use something like "/tmp/xcache" if you want to turn on ReadonlyProtection
; 2 group of php won"t share the same /tmp/xcache
; for win32, xcache.mmap_path=anonymous map name, not file path
xcache.mmap_path = "/dev/zero"
; leave it blank(disabled) or "/tmp/phpcore/"
; make sure it"s writable by php (without checking open_basedir)
xcache.coredump_directory = ""
; per request settings
xcache.cacher = On
xcache.stat = On
xcache.optimizer = Off


; per request settings
; enable coverage data collecting for xcache.coveragedump_directory and xcache_coverager_start/stop/get/clean() functions (will hurt executing performance)
xcache.coverager = Off
; ini only settings
; make sure it"s readable (care open_basedir) by coverage viewer script
; requires xcache.coverager=On
xcache.coveragedump_directory = ""

Как известно, PHP - интерпретируемый язык, т.е. каждый раз при обращении к скрипту, этот скрипт компилируется. Если у вас 1 скрипт, то ничего страшного нет, так как время компиляции не большое. Но в современных CMS и фрэймворках при отображении страницы используется 10-300 отдельных php-файлов (проще говоря, инклуды). Чем больше инклудов и чем они тяжелее, тем дольше выполняется процесс компиляции.

Для решения этой проблемы придумали хранить компилированный вид скрипта в памяти. Существуют специальные модули для хранения откомпиленного кода в памяти. Называются они акселераторы.

Самые известные: eAccelerator, APC, XCache. У каждого есть свои плюсы и минусы. Я использую XCache как наиболее быстрый и надежный. Хотя у каждого есть свое мнение по поводу надежности.

Некоторые акселераторы позволяют хранить в памяти не только скрипты, но и результаты вычислений. Например, выборки из базы данных. На практике это выглядит примерно как хранение кэша в Memcache . Но я использую Memcache - так исторически сложилось.

Админка XCache

У XCache есть небольшая админка для вывода статистики и сброса кэша. Лежит она обычно здесь /usr/local/share/examples/xcache/admin/. Поэтому нужно вынести эту папку куда-нибудь в корень сайта или в свою админку, чтобы можно было смотреть из браузера. Можете скачать админку .

Вот так это выглядит у меня

Первая таблица показывает общую статистику. В ней 2 строчки, так как процессор у меня 2-х ядерный и XCache распределяет кэш по обоим ядрам. Всего у меня выделено 512M.

Админка может выдавать ошибку Fatal error: xcache_count(): xcache.admin.user and xcache.admin.pass
Значит у вас включена авторизация в конфиге xCache.
Проще всего ее вырубить. Я на своем сервере один и ставить пароли внутри сервера мне не нужно.
Авторизация выключаетя в конфиге xcache.admin.enable_auth = Off

Конфиг xCache лежит обычно по адресу /etc/php5/conf.d/xcache.ini
После редактирования конфига необходимо перезагрузить Апач.

Статистика xCache

вернемся к админке (см. картинку выше).

Slots - кол-во слотов под кэш. Это я так понимаю на сколько частей бьется выделяемая память. В моем случае это 8000. Чем больше это значение, тем быстрее идет поиск, но требуется больше памяти.

Size - размер памяти под XCache

Avail - сколько памяти осталось. Как видно у меня ее не осталось. Забиты все 512 Mb

Clear - кнопка сброса кэша

Hits - сколько обращений к файлам было сделано

Misses - сколько обращений к файлам было сделано, но этих файлов в памяти не оказалось. Это нормальный процесс. Файлы меняются - из кэша они вылетают. Но в моем случае все файлы просто не влезают в память, поэтому их там нет, и соответственно идут промахи.

Clogs - это я так понимаю сколько раз мы обратились за какими-то файлами в кэш, но в это время эти файлы еще компилировались, т.е. была блокировка.

OOMs - сколько раз файлы не попали в кэш из-за нехватки памяти.

Cached - кол-во файлов в кэше. Всего у меня 6400 файлов.

Настройки xCache

Пара слов о том, сколько памяти следует выделять. Изначально я выделил 128 Mb, но эта память забилась за 10 минут. Поэтому я выделил 512 Mb и этот объем уже забился за 1 час. Казалось бы, можно выделить 1 Gb и тогда бы точно всё влезло. Но памяти всего 4Гб и лучше выделить ее под MySQL (об этом ). Тем более, файлы которые не попали в кэш в течение часа - это редко используемые скрипты. Просто есть сайты, на которые заходят 10-100 человек в день и без кэширования там можно обойтись. Это так называемый «длинный хвост», который редко используется, но места занимает много. В моем случае это 3% (Misses/Hits).

Что еще не нужно забывать. Допустим, вы поменяли какой-то код на крупной проекте. Место в памяти освободилось и на это пустое место могут быть записаны файлы низкопосещаемых проектов. Соответственно файлы крупного проекта не попадут в кэш. Проще говоря, XCache НЕ умеет отслеживать какие файлы можно выкинуть из кэша и поместить на их место более часто запрашиваемые файлы (это так называемый «горячий» кэш). Поэтому нужно сбрасывать кэш вручную через админку.

Нижняя таблица показывает какие файлы кэшируются и насколько эффективно.

Hits - кол-во обращений к этому скрипту в памяти. Чем больше - тем лучше. Если для некоторых файлов долгое время это значение меньше 10, то значит этот файл редко используется, и лишь занимает место в памяти.

Size - размер этого файла в памяти. Вот тут самое интересное. Получается, что откомпилированный файл занимает в памяти в 10 раз больше места, чем на диске. OMG!

SrcSize - размер файла на диске

Access - как давно обращались к этому файлу

Create - сколько времени этот файл лежит в кэше

Мой конфиг
xcache.size = 512M
xcache.count = 2
xcache.slots = 8K
xcache.ttl = 0
xcache.gc_interval = 0
xcache.var_size = 0M
xcache.var_count = 2
xcache.var_slots = 8K
xcache.var_ttl = 0
xcache.var_maxttl = 0
xcache.test = Off
xcache.cacher = On
xcache.stat = On

Как видно, я отключил использование XCache в качестве кэширования результатов вычислений (xcache.var_size = 0M). Для этого у меня есть Memcache.

Ну и собственно результаты: ускорение в 2-3 раза. Если раньше страница генерировалась за 0.3 секунды (с учетом Memcache), то теперь 0.1 секунды. Это пример из одного проекта на CMS LiveStreet.

Для ускорения выполнения php скриптов существуют так называемые акселераторы.Суть их в том, что один раз вызванных php скрипт компилируется и попадает в кеш акселератора. После чего при повторном обращении к скрипту он уже отдается в откомпилированном виде. Что очень сильно сказывается на нагрузке на сервер, так как теперь не нужно каждый раз компилировать заново скрипт.

xCache - очень хороший, на мой взгляд, акселератор PHP, который увеличивает скорость выполнения php скриптов в нескольку раз..

Использование акселератора в несколько раз уменьшает время генерации страницы, а так же уменьшает нагрузку на процессор сервера. Так у меня после настройки Xcache на сервере количество используемого процессорного времени уменьшилось практически в двое. А так как я использую для размещения своих сайтов виртуальный сервер, где плачу только за использование ресурсов, использование php-акселератора уменьшает итоговою стоимость аренды сервера.

Итак приступим к установке на сервер акселератор php кода — Xcache .

Я использую на сервере операционную систему Ubuntu 10.04 , но и на более новых, например недавно вышедшей Ubuntu LTS 12.04 14.04 с долговременной поддержкой, все будет выглядеть так же. Так же все работает на Debian 7.

Устанавливаем:

Sudo apt-get install php5-xcache Установится последняя стабильная версия, по этому ничего компилировать не нужно.

После установки открываем файл конфигурации в /etc/php5/conf.d/xcache.ini

У меня он выглядит так:

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

Основные параметры:

xcache.size — отвечает за количество памяти для хранения кеша. Если значение будет слишком маленьким, то эффекта от кеширования толком не будет.

xcache.count - количество блоков, на которые будет делиться кеш. Рекомендуется выставлять по количеству ядер процессора.

xcache.slots — Количество слотов под кеш, чем больше слотов, тем больше скорость поиска в кеше. Но и увеличивается потребление памяти. Рекомендуется оставлять значение по умолчанию: 8K

xcache.ttl -Время жизни кешированного объекта в секундах. Если к объекту никто не обращался в течении указанного времени, объкт помечается как не используемый, и в последующем удаляется из кеша сборщиком мусора.

xcache.gc_interval - интервал запуска сборщика мусора в секундах. Определяет промежуток времени, через который будет запускться сборщик мусора. Запустившись, он ищет записи с истекшим временем жизни(xcache.ttl) и удаляет их из кеша.

Два последних параметра(xcache.ttl и xcache.gc_interval) очень важны в настройке Xcache, но на многих сайтах значения данных параметров выставлены в 0, соответственно из кеша ничего не удаляется, и при полном заполнении новые скрипты уже в него не попадают. То есть, если вы разместите на сервере новый сайт, то его скрипты уже не попадут в кеш, так как он полностью заполнен скриптами предыдущего сайта.

Параметры начинающиеся с xcache.var_ отвечают за кэширования результатов вычислений. И их параметры аналогичны.

После сохранения настроек следует перезапустить вебсервер.

Sudo /etc/init.d/apache2 restart

Просмотр статистики Xcache

У Xcache есть своя админка, которая позволяет просматривать текущее состояние и очищать кеш.Что бы она заработала, нужно скопировать папку admin из /usr/local/share/examples/xcache/admin/ в каталог вашего сайта.(Ubuntu)

В Debian 7 данный каталог лежит по пути /usr/share/xcache

Но перед этим следует установить пароль в файле конфигурации. За это отвечают параметры

Xcache.admin.enable_auth

xcache.admin.user= «user»

xcache.admin.pass= «password»

пароль нужно указывать как md5хеш для большей надежности.

Получить md5хеш можно выполнив

Php echo md5("password"); ?> или можно получить хеш например на сайте http://mainspy.ru/shifrovanie_md5

Slots - Количество слотов под кеш, чем больше слотов, тем больше скорость поиска в кеше. Но и увеличивается потребление памяти. Рекомендуется оставлять значение по умолчанию: 8K

Size - размер памяти под Xcache.

Avail - сколько памяти осталось.

Clear - сбросить кеш.

Hits - сколько обращений к файлам было сделано

Misses - сколько обращений к файлам было сделано, но этих файлов в памяти не оказалось.

Clogs - временно заблокированных файлов в кеше.

OOMs - Количество файлов которые не смогли попасть в кеш изза нехватки памяти.

Cached - Общее количество файлов в кеше.

Нижняя таблица показывает какие файлы кэшируются и насколько эффективно.

Hits - кол-во обращений к этому скрипту в памяти. Чем больше - тем лучше. Если для некоторых файлов долгое время это значение меньше 10, то значит этот файл редко используется, и лишь занимает место в памяти.

Size - размер этого файла в памяти. Вот тут самое интересное. Получается, что откомпилированный файл занимает в памяти в 10 раз больше места, чем на диске. OMG!

SrcSize - размер файла на диске

Access - как давно обращались к этому файлу

Create - сколько времени этот файл лежит в кэше

X Cache является свободным и открытым исходным кодом PHP. С использованием XCache у вас будет более высокая производительность вашего выполнения PHP сценария на Линукс VPS . Он может достичь этого, исключая время компиляции PHP кода, кэширует скомпилированную версию PHP кода в память, а затем использует скомпилированную версию кода. Это может значительно ускорить время генерации страницы вплоть до в 5 раз быстрее, а также оптимизирует и повышает многие другие аспекты PHP скриптов и снижает нагрузку на сервер.

В этом уроке мы покажем вам, как установить XCache на CentOS 7 VPS.

Прежде всего, войдите на свой сервер CentOS 7 VPS и убедитесь, что все пакеты на вашем сервере в актуальном состоянии

Yum -y update

Затем, установите следующие пакеты

Yum install -y php-devel gcc make

После того, как будут установлены необходимые пакеты, приступите к скачиванию XCache. Перейти на их официальный сайт и выберете последнюю стабильную версию XCache. На момент написания этой статьи это версия 3.2.0

Cd /opt wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz

Распакуйте загруженный архив.tar

Tar -zxvf xcache-3.2.0.tar.gz

Это создаст новый каталог ‘XCache-3.2.0’. Перейдите в этот каталог

Cd xcache-3.2.0

Выполните команду phpize, чтобы подготовить XCache как расширение PHP

Phpize Configuring for: PHP Api Version: 20100412 Zend Module Api No: 20100525 Zend Extension Api No: 220100525

./configure --enable-xcache make make install

Расположение xcache.so показано на последнем шаге

Installing shared extensions: /usr/lib64/php/modules/

Таким образом, расположение расширения XCache является путь:

/usr/lib64/php/modules/

Теперь нам необходимо отредактировать конфигурационный файл PHP. Для того, чтобы найти его, необходимо. чтобы вы выполнили

Php -i |grep php.ini Configuration File (php.ini) Path => /etc Loaded Configuration File => /etc/php.ini

Создайте файл конфигурации для XCache, и добавьте следующие строки

Nano /etc/php.d/xcache.ini extension = /usr/lib64/php/modules/xcache.so xcache.shm_scheme = "mmap" xcache.size = 32M xcache.count = 1 xcache.slots = 8K xcache.ttl = 3600 xcache.gc_interval = 300 ; Same as aboves but for variable cache ; If you don"t know for sure that you need this, you probably don"t xcache.var_size = 0M xcache.var_count = 1 xcache.var_slots = 8K xcache.var_ttl = 0 xcache.var_maxttl = 0 xcache.var_gc_interval = 300 ; N/A for /dev/zero xcache.readonly_protection = Off xcache.mmap_path = "/dev/zero" xcache.cacher = On xcache.stat = On

Вы можете изменить параметры в файле xcache.ini в соответствии с вашими потребностями.

Перезагрузите веб-сервер Apache для того, чтобы изменения вступили в силу

Systemctl restart httpd.service

На этом этапе XCache должен быть успешно установлен на вашем сервере. Вы можете проверить это, выполнив следующую команду

# php -v PHP 5.4.16 (cli) (built: Jun 23 2015 21:17:27) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies with XCache v3.2.0, Copyright (c) 2005-2014, by mOo with XCache Optimizer v3.2.0, Copyright (c) 2005-2014, by mOo with XCache Cacher v3.2.0, Copyright (c) 2005-2014, by mOo with XCache Coverager v3.2.0, Copyright (c) 2005-2014, by mOo

PS . Если вам понравился этот пост, пожалуйста, поделитесь им с друзьями в социальных сетях с помощью кнопок на левой части поста или просто оставьте комментарий ниже. Заранее благодарю.

© wegonnaplay.ru, 2024
Wegonnaplay - Игры каждый день