Каждый раз, когда вы открываете страничку динамического веб-приложения, веб-сервер обращается к PHP, который загружает запрошенный .php файл и все include и require, затем парсит их, компилирует в промежуточный байт-код (
opcode) и исполняет. Причем в больших проектах процесс включения всех include файлов может занимать весьма продолжительное время.
Поэтому были разработаны многочисленные
PHP-кешеры. Наиболее популярные из них –
APC (Alternative PHP Cache),
XCache и
eAcelerator. Все они позволяют сохранять и повторно использовать скомпилированный байт-код PHP, что позволяет экономить время на сборку всех включений и их компиляцию, экономит процессорное время и оперативную память (причем весьма значительно). Помимо этого, они позволяют хранить в кеше переменные PHP и обращаться к ним при следующем вызове скрипта. Какой из этих кешеров использовать – не особо принципиально, по производительности они не сильно отличаются. Я выбрал
XCache т.к. на него никто не ругается как на
eAcelerator и я уже работал с
APC и было интересно попробовать что-то новое
Так вот, приступим. Установка XCache довольно простая, но тем не менее:
Устанавливаем пакет php5-xcache:
sudo apt-get install php5-xcache
Редактируем конфиг расширения PHP xcache.ini
sudo nano /etc/php5/conf.d/xcache.ini
Там исправляем строчки:
размер opcode кеша. Ставьте около 64Мб. Вообще, если у вас на сайте много различных PHP скриптов с большим количеством различных include, то нужно ставить значение побольше. Если сайт всего один – можно оставить маленькое значение.
xcache.size = 64M
размер кеша данных/переменных. Если в качестве кешера данных используете именно xCache, то ставьте побольше. Если используете Memcached, то установите 0
xcache.var_size = 32M
указываем количество процессоров (или ядер) на вашем компьютере
xcache.count = 2
Убедитесь, что есть строчка
xcache.cacher = On
Для просмотра статистики использования, оценки эффективности и управления кешем имеется веб-интерфейс администратора. В Ubuntu он устанавливается вместе с пакетом и находится в папке /usr/share/xcache в поддиректориях admin и coverage. Так что скопируйте эти папки в директорию веб-сервера, затем настройте доступ к ним в том-же xcache.ini
xcache.admin.user = "user"
xcache.admin.pass = "5f4dcc3b5aa765d61d8327deb882cf99"
;xcache.admin.pass = ""
Здесь первая опция – логин пользователя, вторая – md5 хеш пароля (можно сделать, например,
тут). Можно оставить пароль пустым.
Сохраняем, перезапускаем веб-сервер/php
sudo /etc/init.d/apache2 restart
Админка:
P.S.: после установки кешера отвалился Zend Debuger с сообщением " Debugger compile handler overriden, cannot continue"… Конечно странно ставить кешер и дебагер на одну тачку, но все-же.. Чтобы это пофиксить рекомендуют
sudo nano /etc/php5/conf.d/zend_debugger.ini
и там закомментировать строчку
zend_debugger.expose_remotely=allowed_hosts
Эта опция
The zend_debugger.expose_remotely directive determines whether the debugger will expose itself (i.e. signal its presence) to remote clients. This is required if you want the Zend Studio Browser Toolbar to automatically detect pages that can be debugged. Select ‘always’, ‘never’, or ‘allowed_hosts’ (this only exposes the hosts in the allowed host list)
Т.е. указывает в каких случаях Zend Debuger должен выдавать свое присутствие (посредством специального HTTP заголовка).Таким образом, эта опция становится в положение ‘always’, но зато хотябы будет работать… Тем не менее, это явно баг а не фича!


[...] Источник: http://seriyps.ru/blog/2009/08/08/tyuning-php-ustanovka-xcache-na-ubuntu/ [...]
Сделал xcache.size = 64M и xcache.var_size = 32M сайт уходит в "502 Bad Gateway". Установлен Nginx может быть из-за этого?
Если меняю значения xcache.size и xcache.var_size на другие то сайт работает но команда php -v выдает кроме стандартного вывода:
php -v
/dev/zero: No space left on device
Failed creating file mappping
PHP Fatal error: Failed creating file mappping in Unknown on line 0
PHP Fatal error: XCache: Cannot create shm in Unknown on line 0
Segmentation fault
В общем сделал пока xcache.size = 16M и xcache.var_size = 16M, так ошибок не появляется. Но всё-таки интересно как это можно исправить?
Возможно у вас отсутствует устройство /dev/zero
Можно попробовать заменить
xcache.mmap_path = "/dev/zero"например наxcache.mmap_path = "/tmp/xcache"Ну и xcache.var_size есть смысл ставить больше 0 только если используешь функции вроде xcache_set() xcache_get()
Кстати, возможно это происходит из за недостатка оперативной памяти. Вот еще можно почитать http://forum.lighttpd.net/topic/7188
В частности рекомендуют увеличить значение параметра ядра kernel.shmall
посмотреть текущее значение можно
sysctl -A | grep kernel.shm