Memcached и форум phpbbex

Список разделов phpBBex 1.x (поддерживается) Поддержка 1.x

Описание: У вас проблемы с phpBBex 1.x и вам необходима помощь? Спрашивайте здесь!
Правила раздела: Одна тема — один вопрос или группа связанных вопросов. Обязательно формируйте внятный заголовок, максимально отражающий суть вопроса. Подробно описывайте проблему. Не забудьте указать версию phpBBex и какие моды установлены, по возможности добавьте скриншоты проблемы или ссылку на страницу с проблемой.
Модератор: Поддержка

Сообщение #1 NO SWEAR » 11.07.2014, 14:39

Приветствую всех. У меня вопрос, возможно ли использование Memcached в phpbbex ? Если да, то каким образом реализовать ? По faq хостинга:
Код: Выделить всё
Пример подключения к Memcached из PHP:

 <?php
 $m = new Memcache;
 $m->connect('unix:///home/usersX/первая_буква_логина/логин/memcached/memcached.sock', 0);
 $m->set('key', 'value');
 echo $m->get('key');
 ?>

Куда можно это вставить?

PS: вопрос возник из за переодической высокой нагрузки на mysql.

Добавлено спустя 7 минут 14 секунд:
Поиск по форуму выдал пост factotum но как можно использовать не хватает знаний. :oops:
NO SWEAR M
Автор темы
Аватара
Репутация: 115
С нами: 11 лет 8 месяцев

Сообщение #2 Sumanai » 11.07.2014, 15:30

NO SWEAR:PS: вопрос возник из за переодической высокой нагрузки на mysql.

Мемкеш нагрузку на БД не снизит (но снизит нагрузку на диск).
В общем так. Открываете файл config.php, ищите строку
Код: Выделить всё
$acm_type = 'file';
И заменяете на
Код: Выделить всё
$acm_type = 'memcache';
Очищаете кеш.
Но нужно проконтролировать, прокатило ли.

Добавлено спустя 29 секунд:
NO SWEAR:PS: вопрос возник из за переодической высокой нагрузки на mysql.

Это вам хостер говорит?
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 3 месяца

Сообщение #3 NO SWEAR » 11.07.2014, 21:34

Sumanai:Но нужно проконтролировать, прокатило ли.
Я так понял контроль осуществляется по наличию кеша в папке cache ? если есть файлы то не работает ? а они там присутвуют. :sad: даже после очистки ручной\через админку.

Добавлено спустя 3 минуты 1 секунду:
Sumanai:Это вам хостер говорит?
это я вижу по стате нагрузки.

Спойлер
11.07.png
NO SWEAR M
Автор темы
Аватара
Репутация: 115
С нами: 11 лет 8 месяцев

Сообщение #4 factotum » 11.07.2014, 23:33

NO SWEAR, есть мнение, какая-то приблуда безжалостно флудит по базе.
количество запросов к базе растет не пропорционально соединениям, а живет своей жизнью и довольно активно. по возможности, поглядите сами запросы к базе. может сможете найти виновника.
factotum
Откуда: Люксембург
Репутация: 234
С нами: 12 лет

Сообщение #5 Sumanai » 12.07.2014, 04:50

NO SWEAR:Я так понял контроль осуществляется по наличию кеша в папке cache ?

Не, кеш должен появиться в мемкеше.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 3 месяца

Сообщение #6 NO SWEAR » 12.07.2014, 09:54

Sumanai:Не, кеш должен появиться в мемкеше.
в папке мемкеша только 2 файла. какие были там при подключении услуги.

Спойлер
12.07.png
12.07.png (4 КБ) Просмотров: 9342

Добавлено спустя 1 минуту 19 секунд:
а вот в папке cache форума опять все те же что и были.
NO SWEAR M
Автор темы
Аватара
Репутация: 115
С нами: 11 лет 8 месяцев

Сообщение #7 Sumanai » 12.07.2014, 10:27

NO SWEAR:в папке мемкеша

Мемкеш на то и мемкеш, что он в памяти.
Нужен phpmemcacheadmin или типа того.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 3 месяца

Сообщение #8 NO SWEAR » 12.07.2014, 11:31

Sumanai:Нужен phpmemcacheadmin или типа того.
к сожалению на моём хостинге этого нет. как же тогда понять работает или нет ?
NO SWEAR M
Автор темы
Аватара
Репутация: 115
С нами: 11 лет 8 месяцев

Сообщение #9 Sumanai » 12.07.2014, 13:58

memcacheadmin можно установить самому... Впрочем, если у вас что- то появляется в стандартной папке кеша, значит, мемкеш не работает. Только что проверил.
Так же понял, почему не пашет- phpBB рассчитывает на стандартные настройки, то есть TCP порт 11211, а у вас работа настроена через сокеты.
Попробуем немного магии. Вставьте нижеследующее в конец конфигурационного файла:
Код: Выделить всё
@define('PHPBB_ACM_MEMCACHE_HOST', unix:///home/usersX/первая_буква_логина/логин/memcached/memcached.sock);

@define('PHPBB_ACM_MEMCACHE_PORT, 0);
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 3 месяца

Сообщение #10 NO SWEAR » 12.07.2014, 15:48

При добавлении последнего вылетает ошибка по config.php

Код: Выделить всё
Parse error: syntax error, unexpected ':'

Добавлено спустя 2 минуты 13 секунд:
По техинформации о мемкеше в хостинге есть еще

Код: Выделить всё
IP Memcached-сервера   10.0.0.21
Порт Memcached-сервера   52675
NO SWEAR M
Автор темы
Аватара
Репутация: 115
С нами: 11 лет 8 месяцев

Сообщение #11 factotum » 12.07.2014, 16:23

не знаю ребят. хранить кеш страниц в shared memory через акселератор не лучшая идея.
имхо более привлекательная схема - кеширование фрагментов средствами nginx +... в этой схеме можно закешировать и запросы к БД. И минимальные перспективы получить утечки памяти, как это частенько происходит у акселераторов...
Последний раз редактировалось factotum 12.07.2014, 16:28, всего редактировалось 1 раз.
factotum
Откуда: Люксембург
Репутация: 234
С нами: 12 лет

Сообщение #12 Sumanai » 12.07.2014, 16:27

NO SWEAR:При добавлении последнего вылетает ошибка по config.php

Ну да, кавычки забыл. Впрочем, даже у меня не вышло настроить мемкеш на сокеты в phpBB. Думаю, он просто не умеет с ними работать.

NO SWEAR:По техинформации о мемкеше в хостинге есть еще

Вот сразу бы так и написали. Добавляем туда же, куда и раньше.
Код: Выделить всё
@define('PHPBB_ACM_MEMCACHE_HOST', '10.0.0.21');

@define('PHPBB_ACM_MEMCACHE_PORT, '52675');

factotum:хранить кеш страниц в shared memory через акселератор не лучшая идея.

Так мы и не про это. Мы про стандартный кеш, который в папке cache, и про мемкеш, а не кеш акселератора.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 3 месяца

Сообщение #13 factotum » 12.07.2014, 16:28

Sumanai:ак мы и не про это. Мы про стандартный кеш, который в папке cache.
а там прекомпилированные запросы php?
factotum
Откуда: Люксембург
Репутация: 234
С нами: 12 лет

Сообщение #14 Sumanai » 12.07.2014, 16:29

factotum:а там прекомлпилированные запросы php?

Там кеш форума же. Ни разу туда не заглядывали? Кеш запросов к БД, шаблонов (впрочем, они всё равно хранятся в файлах), распарсеной конфигурации, стилей и так далее.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 3 месяца

Сообщение #15 factotum » 12.07.2014, 16:42

Sumanai:Там кеш форума же. Ни разу туда не заглядывали? Кеш запросов к БД, шаблонов (впрочем, они всё равно хранятся в файлах), распарсеной конфигурации, стилей и так далее.
не заглядывал, так как смысла не увидел. Кеш запросов к БД и файлы стилей или сами страницы -- очень разные вещи. Если стили, страницы и прочую статику имеет смысл оставить на диске, то запросы к БД и прекомпилированные фрагменты наиболее часто используемого кода имеет смысл уже вынести в память. Снова таки, по небольшому опыту работы с кешированием через акселераторы, можно сказать о необходимости прокси, контролирующего кеширование. Что-то изменил - соответствующие ветки кеша должны сбрасываться при изменении. PHPBB умеет проксировать акселераторы?
Последний раз редактировалось factotum 12.07.2014, 16:43, всего редактировалось 1 раз.
factotum
Откуда: Люксембург
Репутация: 234
С нами: 12 лет

Сообщение #16 NO SWEAR » 12.07.2014, 16:43

Sumanai:Вот сразу бы так и написали. Добавляем туда же, куда и раньше.
вставил. очередная ошибка.

Код: Выделить всё
Parse error: syntax error, unexpected '52675' (T_LNUMBER)

Добавлено спустя 16 минут 35 секунд:
нашел. кавычка потерялась.

Добавлено спустя 7 минут 19 секунд:
ошибок нет. но блин как понять что работает. кстати в cache всё так же присутсвуют файлы кеша.
NO SWEAR M
Автор темы
Аватара
Репутация: 115
С нами: 11 лет 8 месяцев

Сообщение #17 Sumanai » 12.07.2014, 17:54

factotum:Если стили, страницы и прочую статику имеет смысл оставить на диске, то запросы к БД и прекомпилированные фрагменты наиболее часто используемого кода имеет смысл уже вынести в память.
factotum:не заглядывал, так как смысла не увидел.
Вот и посмотрите, что там. Там именно то, что вы указали как необходимое к кешированию. Стили в phpBB 3.0 строятся динамически скриптом, пора бы знать.
factotum:Снова таки, по небольшому опыту работы с кешированием через акселераторы,
Sumanai:и про мемкеш, а не кеш акселератора.
NO SWEAR:кстати в cache всё так же присутсвуют файлы кеша.
Файлы кеша стилей так и будут там храниться, не знаю, почему для них исключение.
Очистите папку руками (кроме index.html и .htaccess), и посмотрите, появятся ли там кеша запросов, конфигурации, в общем что либо, кроме кеша стилей, с префиксом tpl_.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 3 месяца

Сообщение #18 NO SWEAR » 12.07.2014, 18:19

Sumanai:и посмотрите, появятся ли там кеша запросов, конфигурации, в общем что либо, кроме кеша стилей, с префиксом tpl_.
заглянул в папку кеша. на данный момент там только файлы с префиксом tpl_ и ctpl

Спойлер
cache.png

спасибо за помощь. :pray:
NO SWEAR M
Автор темы
Аватара
Репутация: 115
С нами: 11 лет 8 месяцев

Сообщение #19 factotum » 12.07.2014, 20:25

NO SWEAR, отпишитесь позже о результатах изменения нагрузки на сервер, пожалуйста.
factotum
Откуда: Люксембург
Репутация: 234
С нами: 12 лет

Сообщение #20 NO SWEAR » 05.02.2015, 15:52

Привет всем. итоги по прошествии использования показали что нагрузка снизилась но остались пикообразные скачки запросов к базе. так же был "приятно" удивлен что ип и порт мемкеша вдруг изменились. а техподдержка тупо сливает мол используйте сокеты и будет вам счастье. только вот беда не работает ничего с их сокетами.
А еще нашел интересный файлик в includes/acm/ под названием acm_memcache.php Кто может пояснить для чего он нужен?
Вот код файла:
Спойлер
Код: Выделить всё
<?php
/**
*
* @package acm
* @version $Id$
* @copyright (c) 2005, 2009 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
   exit;
}

// Include the abstract base
if (!class_exists('acm_memory'))
{
   require("{$phpbb_root_path}includes/acm/acm_memory.$phpEx");
}

if (!defined('PHPBB_ACM_MEMCACHE_PORT'))
{
   define('PHPBB_ACM_MEMCACHE_PORT', 11211);
}

if (!defined('PHPBB_ACM_MEMCACHE_COMPRESS'))
{
   define('PHPBB_ACM_MEMCACHE_COMPRESS', false);
}

if (!defined('PHPBB_ACM_MEMCACHE_HOST'))
{
   define('PHPBB_ACM_MEMCACHE_HOST', 'localhost');
}

if (!defined('PHPBB_ACM_MEMCACHE'))
{
   //can define multiple servers with host1/port1,host2/port2 format
   define('PHPBB_ACM_MEMCACHE', PHPBB_ACM_MEMCACHE_HOST . '/' . PHPBB_ACM_MEMCACHE_PORT);
}

/**
* ACM for Memcached
* @package acm
*/
class acm extends acm_memory
{
   var $extension = 'memcache';

   var $memcache;
   var $flags = 0;

   function acm()
   {
      // Call the parent constructor
      parent::acm_memory();

      $this->memcache = new Memcache;
      foreach(explode(',', PHPBB_ACM_MEMCACHE) as $u)
      {
         $parts = explode('/', $u);
         $this->memcache->addServer(trim($parts[0]), trim($parts[1]));
      }
      $this->flags = (PHPBB_ACM_MEMCACHE_COMPRESS) ? MEMCACHE_COMPRESSED : 0;
   }

   /**
   * Unload the cache resources
   *
   * @return null
   */
   function unload()
   {
      parent::unload();

      $this->memcache->close();
   }

   /**
   * Purge cache data
   *
   * @return null
   */
   function purge()
   {
      $this->memcache->flush();

      parent::purge();
   }

   /**
   * Fetch an item from the cache
   *
   * @access protected
   * @param string $var Cache key
   * @return mixed Cached data
   */
   function _read($var)
   {
      return $this->memcache->get($this->key_prefix . $var);
   }

   /**
   * Store data in the cache
   *
   * @access protected
   * @param string $var Cache key
   * @param mixed $data Data to store
   * @param int $ttl Time-to-live of cached data
   * @return bool True if the operation succeeded
   */
   function _write($var, $data, $ttl = 2592000)
   {
      if (!$this->memcache->replace($this->key_prefix . $var, $data, $this->flags, $ttl))
      {
         return $this->memcache->set($this->key_prefix . $var, $data, $this->flags, $ttl);
      }
      return true;
   }

   /**
   * Remove an item from the cache
   *
   * @access protected
   * @param string $var Cache key
   * @return bool True if the operation succeeded
   */
   function _delete($var)
   {
      return $this->memcache->delete($this->key_prefix . $var);
   }
}

?>
NO SWEAR M
Автор темы
Аватара
Репутация: 115
С нами: 11 лет 8 месяцев

След.

Вернуться в Поддержка 1.x