среда, 18 сентября 2013 г.

Ускоряем Moodle при помощи APC + Memcached

Не так давно (если не ошибаюсь, с версии 2.4-2.5) версия Moodle стала страшно тормозить в дефолтной поставке PHP. Нет не страшно тормозить, а  тратить 30 СЕКУНД на генерацию страницы.  Впрочем, это случается с любым неминималистичным веб-фреймворком рано или поздно, а Moodle никогда не был маленьким и легковесным, в силу своей предметной области. А значит - нет смысла ругаться, надо решать проблему :)

Я нашел около двух способов ускорения, однако есть и больше. Навскидку - можно использовать WinCache под Windows и другие (см. stores). Да и Memcached не так уж обязателен Вот здесь по идее можно скачать плагин и настроить для работы Moodle Universal Cache c APC (у меня оно кладется в Memcached).

Иными словами,  здесь описан мой путь, который несколько костыльный, однако - сработал. Результатом его является то, что главная сейчас отдается за 300мс, а  время генерации страницы в худшем случае - 4с. Данная конфигурация работает на двухядерном Intel Atom D2700 и 2Гб RAM под управлением Ubuntu 12.04

Cперва установим APC. Мануал взят по ссылке [1].

sudo apt-get install php-apc
service apache2 restart

У меня юзался php-fpm (в дефолте убунты это так) и его необходимо было перезагрузить:

service php5-fpm restart

Количество памяти можно смело поднимать до 256Мб - это дает позитивный эффект, и память сильно не фрагментируются в итоге. Прикладываю конфиг /etc/php5/conf.d/apc.ini для настройки

extension=apc.so
apc.shm_size=256M
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.enable_cli=1
apc.rfc1867=1


Вторым этапом настраивается Memcached. Мануал опять же взят по ссылке [2], однако есть небольшие отличия, связанные с версией. Ставим необходимые пакеты.

sudo apt-get install memcached php-pear php5-dev 
sudo apt-get install libmemcached-dev
sudo pecl install Memcache
service apache2 restart
service php-fpm restart 


Стоит добавить следующую строку в /etc/php5/apache2/php.ini (хотя по идее инсталлер это сделает сам, у меня почему-то не сделал):

extrension=memcache.so


И в config.php самого Moodle прописываем:

$CFG->cachetype='memcached';
$CFG->rcache = true;
$CFG->memcachedhosts= '127.0.0.1';
$CFG->memcachedpconn=true;


Для полной уверенности можно выполнить:

service memcached restart

Комментариев нет:

Отправить комментарий