Vladimir Kolesnikov Меня зовут Владимир, я программист-фрилансер (PHP, Node.js, C/C++, Qt). Ещё занимаюсь администрированием серверов и техническим переводом. Крестиком вышивать не умею.
Окт 142010
 

Делаем еще быстрее

После года тестирования наконец-то вышла первая стабильная версия плагина .

SJ Object Cache — альтернатива плагину , поддерживающая , , , Zend Disk Cache, Zend Shared Memory Cache, и .

В отличие от WP File Cache, SJ Object Cache ориентирован на VPS/VDS и выделенные сервера.

Одним из недостатков WP File Cache является то, что он смещает нагрузку с базы данных на файловую систему. Хотя это может быть не сильно критично для хорошего shared-хостинга, на виртуальных серверах и серверах со слабой дисковой подсистемой это может быть критично (виртуализация очень часто негативно сказывается на скорости ввода/вывода, в результате процессор может проводить много времени в ожидании окончания ввода/вывода). Вдобавок ко всему при включённом open_basedir файловые операции осуществляются медленнее из-за лишних проверок (привет всем, использующим Plesk).

Решением данной проблемы является использование разделяемой памяти (shared memory). Так как многие администраторы для повышения производительности ставят на выделенных серверах акселераторы (APC, xCache, eAccelerator), SJ Object Cache использует их интерфейс (API) для работы с выделенной памятью.

Функциональность SJ Object Cache

  • реализация долговременного кэширования на уровне запросов;
  • возможность отключения кэширования (в том числе и встроенного в WordPress);
  • возможность отключения межсессионного кэширования;
  • полная совместимость с интерфейсом класса WP_Object_Cache WordPress;
  • использование памяти под сессионный для увеличения производительности;
  • сессионное кэширование часто изменяющихся объектов;
  • возможность задания групп, не подлежащих межсессионному кэшированию (может быть полезно для обеспечения совместимости со сторонними плагинами);
  • модульная архитектура, позволяющая добавлять новые кэширующие движки;
  • хранение настроек в коде плагина.

Кэширующие движки

  • Base Cache — аналог объектного кэша WordPress без возможности сохранения данных между сессиями; по тестам показывает чуть большую производительность, чем встроенный в WordPress кэш;
  • Alternative PHP Cache (APC);
  • eAccelerator (внимание: eAccelerator 0.9.6 не поддерживается, так как из него убрали функции кэширования пользовательских данных);
  • xCache
  • Zend Disk/Shared Memory Cache (данный движок не тестировался, но работать должен);
  • File Cache — модифицированная версия движка WP File Cache;
  • File Group Cache — модифицированная версия File Cache, оптимизированная под слабую дисковую подсистему (при доступе к кэшу читается сразу вся группа, что приводит к минимизации числа обращений к диску и увеличению объема потребляемой памяти);
  • Memcache;
  • Memcached;
  • Версия 1.2 плагина полностью совместима с WordPress 3.x (в том числе с 3.1).

Замечания по установке

Плагину при активации/сохранении настроек должен быть доступен на запись каталог wp-content: в него копируется файл object-cache.php.

В настройках акселератора (APC, eAccelerator, xCache) нужно отвести достаточно места под пользовательский кэш. WordPress весьма прожорлив!

Настройки, контролирующие размер кэша APC: apc.shm_segments, apc.shm_size.

Настройки, контролирующие размер кэша xCache: xcache.var_size. xCache — единственный из трёх рассматриваемых акселераторов, имеющий раздельные кэши для опкода и пользовательских данных.

Настройки, контролирующие размер кэша eAccelerator: eaccelerator.shm_size.

Для APC и eAccelerator размер кэша должен учитывать кэш опкода. По скромным подсчётам, WordPress 2.9.2 без плагинов (PHP 5.1.22, amd-64) занимает порядка десяти мегабайт. Для настройки размера кэша очень рекомендую воспользоваться утилитами, входящими в дистрибутив акселератора: они позволяют оценить объем занятой памяти, фрагментации кэша и просматривать различную статистику. Если с первого раза оптимальный размер кэша подобрать не удаётся, это нормально :-)

Memcache и Memcached требуют наличия установленных расширений PHP из PECL (Memcache и Memcached соответственно).

На данном сервере (пять разных WordPress с разным наборов плагинов (SJ Object Cache настроен на трёх из них), три Simple Machines Forum, куча всего по мелочи, кэш eAccelerator для хранения сессий) размер кэша колеблется в пределах 128–192 мегабайт. Север выдерживает больше тысячи одновременных посетителей, порядка 100,000 посетителей в сутки и генерирует в среднем 64 гигабайта трафика в сутки — и это безо всяких страничных кэшей типа WP Super Cache, Hyper Cache, W3 Total Cache, MaxSite Cache и т.п. Не без напильника, но тем не менее.

Удаление/деактивация плагина

Для успешной деактивации каталог wp-content должен быть доступен на запись — требуется удаление файла wp-content/object-cache.php.

Для версии 1.2 плагина на запись должен быть доступен каталог плагина — настройки плагина теперь хранятся в файле options.php (специально для тех, кто не хотел держать wp-content открытым на запись).

Скачать SJ Object Cache 1.0.
Экспериментальная версия SJ Object Cache 1.1 с поддержкой WordPress MU.
Экспериментальная версия SJ Object Cache 1.2 с поддержкой Memcache/Memcached

  200 Ответов в “SJ Object Cache: еще более быстрое объектное кэширование для WordPress”

Comments (193) Pingbacks (7)
  1. И снова здравствуйте )) Пришел к вам за советом — кстати, спасибо за ваши ответы — вот установил я SJ Object Cache, запустил. В админке появилась вкладка, на ней четыре подраздела. С первым, «Общие настройки», все понятно, а что указывать в трех оставшихся, FileCache, FileGroupCache и xCache? FileCache, FileGroupCache они идут как приложение к установленному xCache или вообще не связаны с ним? Поля, в которых нужно указать путь до хранения кеша, у меня не заполнены. Их нужно заполнять или они используются отдельно от xCache? В настройках кэширующего модуля xCache указан адрес вашего блога «blog.sjinks.pro», его нужно менять на тот, где установлен ваш плагин или можно оставить? Сплошные вопросы. Извините, если напрягаю лишний раз. Тема с кешем в ВП настолько больная, что… ну вы понимаете, о чем я говорю ))

    • FileCache, FileGroupCache и xCache

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

      Активный движок выбирается в Общих настройках.

      Лучше всего сначала задать настройки движка, который Вы будете использовать (да, замените blog.sjinks.pro на что-то своё, не обязательно на домен сайта — главное, чтобы этот ключ был уникален для каждого из сайтов на Вашем сервере), а потом включите этот движок в Общих настройках.

  2. А какая версия все таки последняя (и рекомендуемая к использованию) — 1.2 или 1.3?

  3. При установке и активации плагина:

    Плагин не был активирован, потому что он вызвал фатальную ошибку.
    Warning: require_once(/var/www/wp-content/plugins/em-object-cache/lib/CacheFactory.php): failed to open stream: No such file or directory in /var/www/wp-content/plugins/em_object_cache/core.php on line 13 Fatal error: require_once(): Failed opening required ‘/var/www/wp-content/plugins/em-object-cache/lib/CacheFactory.php’ (include_path=’.:/usr/share/php:/usr/share/pear’) in /var/www/wp-content/plugins/em_object_cache/core.php on line 13

  4. при использовании плагина + xcache, большое количество Misses http://f3.s.qip.ru/j1zuY83A.png является нормальным, или есть смысл что-то покрутить?

  5. Thanks. love this plugin. I am used now

  6. this very useful thank for nice plugin.

  7. Здравствуйте,

    Скажите, пожалуйста, по какой причине может забивать папку comment? За 3 дня эта папка может разрастись до 3-4 гигов. Ранее на wp-file-cache работает, так там разрастались папки posts и terms, а тут комменты растут.

    Можете помочь разобраться, как отдебажить? Спасибо!

    • Есть подозрение, что по сайту прошёлся робот. Старые файлы автоматом не удаляются из-за того, что это может нагрузить систему.

      Попробуйте настроить крон, чтобы он выполнял такой скрипт (раз в день, желательно, когда нагрузка на сайт минимальна):

      [-]
      View Code Bash
      find /path/to/cache -type f -mtime +1 -print0 | xargs --no-run-if-empty -0 rm -f

      /path/to/cache — путь к каталогу, где хранится кэш.

      Команда удалит все файлы старше одного дня.

      А еще лучше — поставьте memcached и используйте соответствующий движок :-) Файловый движок — самый медленный.

      • Спасибо большое за ответ.

        Файловая система довольно шустрая, так как хостер перешел на ssd, так что проблем с удалением нету. Скажите, только, пожалуйста, через ISPManager такой скрипт запустить возможно, если нету доступа к консоли сервера?

        На счет memcached, то нету его на шареде :( Есть apc и eaccelerator. Расширения через тот же ISPManager могу включить, но, eaccelerator не отображает в списке, видимо версия не подходящая.

    • Таксь, с удалением файлов через крон разобрался, вот только все равно остается непонятный осадок от того, почему так много места занимают комментарии? Какие-то изменения произошли в самом движке, что кэш так забивается? Ранее, таких трудностей не было, да и с плагинами ничего не изменилось толком, вот и интересно, может какой-то баг закрался?
      Началось все еще с WP File Cache, когда начали забиваться папки terms и posts однотипными файлами кэша, в которых был прописан id сраницы. Поскольку страницы статичные на сайте 2, то они по очереди и чередовались. Плагин использую уже больше года, если не два и до определенного момента (более связываю это с выходом новой версии Wordpress) все работала как часики.

      Перешел на Em Object Cache и уже началась забиваться папка Comment.

      Так бы не хотелось переходить на тариф дороже, так как реально есть почти 5 гб свободного места и его постоянно съедают комментарии :(

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

      Еще раз спасибо!

  8. Вообще вордпресс мой любимый движок что бы о нем плохого не писали малознающие люди в сети

  9. Еще одну странность заметил.

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

    Если у Вас будет возможность, сделайте, пожалуйста, опцию отключения кэша в админке, как это было в wp file cache. Спасибо!

  10. Еще один момент (баг) заметил.

    На блоге был создан CPT ‘Articles’. Когда пост переведен в режим «Опубликован», то в некоторых браузерах по урлу отдается 404-ая ошибка. Бывает, когда в facebook хочешь опубликовать ссылку, в сниппет подтягивает 404-ую.

    Когда кэш очищается или через некоторое время, все стает хорошо и статья отдается. Но, сами понимаете, что для траста в поисковой среде это может иметь негативное значение.

    Еще раз спасибо за плагин, надеюсь, у Вас будет время и желание, чтобы его доработать.

Leave a comment below if you dare

If by accident you see this form, please do not use it; use the form below this instead.

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

(обязательно)

(обязательно)

Вы можете использовать эти HTML теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, вы выражаете своё согласие с Правилами комментирования.