Блог - Linux, программирование, Я!

WEB, ИнтернетТюнинг PHP – установка XCache на Ubuntu

Каждый раз, когда вы открываете страничку динамического веб-приложения, веб-сервер обращается к 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

Админка:

xcache панель администратора

phpinfo()

xcache phpinfo

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’, но зато хотябы будет работать… Тем не менее, это явно баг а не фича!

  1. 2010-05-09 17:03:47 | #

    Сделал 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, так ошибок не появляется. Но всё-таки интересно как это можно исправить?

    • 2010-05-14 01:13:08 | #

      /dev/zero: No space left on device

      Возможно у вас отсутствует устройство /dev/zero

      Можно попробовать заменить xcache.mmap_path = "/dev/zero" например на xcache.mmap_path = "/tmp/xcache"

      Ну и xcache.var_size есть смысл ставить больше 0 только если используешь функции вроде xcache_set() xcache_get()

    • 2010-05-14 01:33:59 | #

      Кстати, возможно это происходит из за недостатка оперативной памяти. Вот еще можно почитать http://forum.lighttpd.net/topic/7188

      В частности рекомендуют увеличить значение параметра ядра kernel.shmall

      посмотреть текущее значение можно

      sysctl -A | grep kernel.shm