Борьба с 502 bad gateway или как установить xcache на 0.4.2

Итак после долгих мытарств и по мотивам livestreet.ru/blog/questions/5335.html решил написать как установить xcache на LS 0.4.2. Мне установка xcache реально помогла в решении проблемы ошибки 502 и в целом для более стабильной работы сайтов. Итак поехали:
Первым делом убираем memcache и eaccelerator. Я не стал ничего удалять из системы, просто закомментировал в php.ini строки относящиеся к eaccelerator, аналогично в /etc/php5/conf.d/memcache.ini также все закомментировал. Наверное это неправильно, кто знает как совсем удалить отпишитесь в каментах.

Теперь собственно установка xcache:

apt-get install php5-xcache


Установили, теперь настраиваем:
nano /etc/php5/apache2/conf.d/xcache.ini


Редактируем секцию админки:

[xcache.admin]
xcache.admin.enable_auth = On
# Configure this to use admin pages
 xcache.admin.user = "mOo"
; xcache.admin.pass = md5($your_password)
 xcache.admin.pass = "my_password_md5"


Вместо mOo вписываем свое имя, вместо my_password_md5 — свой админский пароль

Создать себе md5 пароль можно этим скриптом:
echo '<?php echo md5("ваш_пароль"); php?>' > /var/www/pass.php && lynx http://127.0.0.1/pass.php && rm /var/www/pass.php


Устанавливаем web админку для управления cache:

wget http://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz
tar -xf xcache-1.2.2.tar.gz
mkdir /opt/xcacheadmin && cp xcache-1.2.2/admin/* /opt/xcacheadmin


Создаем файл /opt/xcacheadmin/apache.conf с таким содержимым:

Alias /xcacheadmin /opt/xcacheadmin
<Directory /usr/share/phpmyadmin>
 Options Indexes FollowSymLinks
 DirectoryIndex index.php
</Directory>


Подключаем его к apache:

ln -n /opt/xcacheadmin/apache.conf /etc/apache2/conf.d/xchacheadmin.conf


На этом установка xcache в систему закончена, переходим к LS:

Сохраняем framework.zend.com/svn/framework/standard/trunk/library/Zend/Cache/Backend/Xcache.php в каталог engine/lib/external/DklabCache/Zend/Cache/Backend

Слегка редактируем файл Xcache.php, первые две строчки приводим к виду:

require_once (LS_DKCACHE_PATH.'Zend/Cache/Backend/Interface.php');

require_once (LS_DKCACHE_PATH.'Zend/Cache/Backend.php');


Редактируем engine/modules/cache/Cache.class.php

После
define('SYS_CACHE_TYPE_MEMORY','memory');
добавляем
define('SYS_CACHE_TYPE_XCACHE','xcache');


Перед

} else {
			throw new Exception("Wrong type of caching: ".$this->sCacheType." (file, memory)");
		}


добавляем

} elseif($this->sCacheType==SYS_CACHE_TYPE_XCACHE) {
                        require_once(LS_DKCACHE_PATH.'Zend/Cache/Backend/Xcache.php');
						$aConfigMem=Config::Get('xcache');
                        $oCahe = new Zend_Cache_Backend_Xcache(array());
                        $this->oBackendCache = new Dklab_Cache_Backend_TagEmuWrapper(new Dklab_Cache_Backend_Profiler($oCahe,array($this,'CalcStats')));


В следующую ниже конструкцию также добавляем xcache так:

} else {
			throw new Exception("Wrong type of caching: ".$this->sCacheType." (file, memory, xcache)");
		}


В основной конфиг прописываем

$config['sys']['cache']['type']   = 'xcache';


Админка xcache находится по адресу
http://ваш сайт.ru/xcacheadmin


Перезапускаем сервер и радуемся стабильной работе, теперь можно забыть про 502 bad gateway. Не знаю как кому но мне реально помогло полностью избавиться от этой проблемы. Предлагаю разработчикам LS включить поддержку xcache в движок, ибо мой пример очень показателен, думаю не лишним будет опция xcache в конфиге. Mmka персональный респект, его совет избавил меня от глюков и проблем. Улучшения, комментарии и предложения приветствуются.
Предлагаем качественную замену матрицы на ноутбуках. Вдохнем вторую жизнь в ваш ноутбук!

32 комментария

avatar
под кат бы…
avatar
Убрал под кат
avatar
Просьба ort'у добавить возможность использовать xcache кому это необходимо.
Автору огромное спасибо, ночью постараюсь свой тоже перенести на xcache — у самого постоянно зависает сервер из-за eaccelerator'а.
  • Mmka
  • +1
avatar
в trac писать надобно
avatar
Итак я похоже был первым тестировщиком.
Во первых надо отредактировать файл Xcache.php — там есть 2 недочета в плане путей. Я думаю автор скоро выложит новый исправленный файл — мы говорили уже на эту тему.
Во вторых у меня появлялась ошибка:
Warning: xcache_get() [function.xcache-get]: xcache.var_size is either 0 or too small to enable var data caching 
Решилась изменением настройки в Xcache.ini
xcache.var_size  =            32M
Выбираете нужную вам цифру.
  • Mmka
  • 0
avatar
Обновил топик, добавил редактирование путей в Xcache.php. На всякий случай продублирую тут:
в Xcache.php первые 2 строки приводим к виду:

require_once (LS_DKCACHE_PATH.'Zend/Cache/Backend/Interface.php');
require_once (LS_DKCACHE_PATH.'Zend/Cache/Backend.php');

Вторые сутки — ни одной ошибки 502 ни на одном из 6 сайтов, чисто субъективно — быстрее работают.
avatar
Аналогично этому топику и вот этому сделал замену memcached и eaccelerator'y на сайте с версией 0.3.1
Работает пошустрее. Посмотрим как будет вести себя под нагрузкой.
  • Mmka
  • 0
avatar
xcache.test = On
xcache.mmap)path="/tmp/xcache" и папку (!) не создавать эту.
avatar
спасибо за мануал. очень помогло.
avatar
На php5.3 выводит ошибку:

Fatal error: Uncaught exception 'Exception' with message 'Wrong type of caching: xcache (file, memory, xcache)' in /var/www/site.com/engine/modules/cache/Cache.class.php:101 Stack trace: #0 /var/www/site.com/engine/classes/Engine.class.php(124): ModuleCache->Init() #1 /var/www/site.com/engine/classes/Engine.class.php(94): Engine->InitModules() #2 /var/www/site.com/engine/classes/Router.class.php(66): Engine->Init() #3 /var/www/site.com/index.php(34): Router->Exec() #4 {main} thrown in /var/www/site.com/engine/modules/cache/Cache.class.php on line 101

Не могу разобраться :(
Хотя на 5.2 все вроде сработало
  • Mmka
  • 0
avatar
Разобрался:
В конструкцию
} elseif($this->sCacheType==SYS_CACHE_TYPE_XCACHE) {

внести изменения:
} elseif($this->sCacheType=='SYS_CACHE_TYPE_XCACHE') {

На 5.3 все тоже работает
avatar
пробывал ставить xcache по инструкции
при конструкции
} elseif($this->sCacheType==SYS_CACHE_TYPE_XCACHE) { выдаёт ошибку

Warning: require_once(/usr/local/www/apache22/data/site.ru/engine/lib/external/DklabCache/Zend/Cache/Backend/Xcache.php): failed to open stream: No such file or directory in /usr/local/www/apache22/data/site.ru/engine/modules/cache/Cache.class.php on line 86 Fatal error: require_once(): Failed opening required '/usr/local/www/apache22/data/site.ru/engine/lib/external/DklabCache/Zend/Cache/Backend/Xcache.php' (include_path='.:/usr/local/share/pear:/usr/local/www/apache22/data/site.ru:/usr/local/www/apache22/data/site.ru/engine/classes') in /usr/local/www/apache22/data/site.ru/engine/modules/cache/Cache.class.php on line 86 

а при
} elseif($this->sCacheType=='SYS_CACHE_TYPE_XCACHE') {
Fatal error: Uncaught exception 'Exception' with message 'Wrong type of caching: xcache (file, memory, xcache)' in /usr/local/www/apache22/data/site.ru/engine/modules/cache/Cache.class.php:92 Stack trace: #0 /usr/local/www/apache22/data/site.ru/engine/classes/Engine.class.php(124): ModuleCache->Init() #1 /usr/local/www/apache22/data/site.ru/engine/classes/Engine.class.php(94): Engine->InitModules() #2 /usr/local/www/apache22/data/site.ru/engine/classes/Router.class.php(66): Engine->Init() #3 /usr/local/www/apache22/data/site.ru/index.php(34): Router->Exec() #4 {main} thrown in /usr/local/www/apache22/data/site.ru/engine/modules/cache/Cache.class.php on line 92 

версия php 5.3.3, может ктонибудь подсказать в чём ошибка?
avatar
а вы Xcache.php то добавили?
avatar
Были же такие ошибки. Снова все сделайте шаг за шагом по инструкции.
avatar
Автор топика, ошибку которую Вы писали 502 и так далее, никак не относится к работе memcache и eaccelerator. У меня стоит и то и другое, и вебсервер nginx. После плясок с бубном на nginx, всё работает тип топ. По крайней мере, нет тех ошибок, о котором Вы писали ранее.
avatar
вам повезло. я тоже с похожей проблемой столкнулся. да и визуально eacc+memcache отстает от xcache.
avatar
визуально кстати да. тоже заметил.
а вот у меня поначалу тоже работала связка с mem + eac. но были падения раз в месяц — непонятно почему. поддержка тоже была в недоумении. поменял на xcache и проблем как не было
avatar
и что посоветуете, как настроить nginx?
на SP стала появляться такая же проблема.
avatar
конкретно nginx?

вообще советую ставить на nginx + php5-fpm + xcache. Хотите большей производительности — вам не обойтись без spawn-fastcgi на сокетах. Если сервер на фре, там всё это из портов ставится. реврайты для нгинкса много раз здесь были описаны.

ЗЫ. а вообще я бы советовал ставить cherokee и иметь счастье))
avatar
а вы Xcache.php то добавили?
добавил и отредактировал
изменил первые 2 строчки
require_once (LS_DKCACHE_PATH.'Zend/Cache/Backend/Interface.php');

require_once (LS_DKCACHE_PATH.'Zend/Cache/Backend.php');
avatar
вам говорят, что
/usr/local/www/apache22/data/site.ru/engine/lib/external/DklabCache/Zend/Cache/Backend/Xcache.php
по данному пути файла нет.
avatar
Перевел на хкэш, все зашуршало гораздо быстрей, но от 502 так и не помогает :( Падает, хоть и реже.
avatar
Попробуй поковырять настройки apache2.conf и nginx.conf там тоже тоже собака может быть зарыта.
avatar
Знать бы еще что ковырять. Яж валено в этой теме. Были бы решения вида Х+У = лажа. надо Х+Z Вроде этой статьи.
avatar
Установил на ервер, вписал в конфиг (благо в LS0.5 уже есть xcache), потер кеш и куки, но выдает ошибку
Fatal error: Uncaught exception 'Zend_Cache_Exception' with message 'The xcache extension must be loaded for using this backend !' in ....

Как ставить на последнюю версию LS можете подсказать?
avatar
на сам сервер нужно установить поддержку xcache
avatar
Установил на сам сервер.
apt-get install php5-xcache

Настроил, как тут написано и подключил к апачу.
avatar
Фронтенд NGINX, бэкенд Apache2.
Стоит PHP 5.3 и XCache. Делал все по инструкции, пару дней нормально, потом опять 502 ошибка. Посещалка около 1000 уников. Причем такое вижу только на движке LiveStreet.
На серваке еще с десяток сайтов и на других сайтах в это время все ок.
avatar
Какие версии nginx и xcache? Если что попробуй поставить посвежее nginx 1.0.10 и xcache 1.3.2
avatar
Apache 2.2.20
XCache 1.3.2
PHP 5.3.6 with Suhosin-Patch
nginx 1.0.5
avatar
И кстати, все это крутится на серваке Core I7 2600, с 16 GB RAM и средним load не превышающим 0.15…
avatar
Блин как надоел этот 502 Bad Gateway уже все перепробовал — ничего не помогает.
Пробовал разные типы кэширования, отключал кэширование вс равно 502. В лгах апача segmentation failed.
Все остальные сайты работают отлично, только LS такое. Видимо что-то криво у него с XCache
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.