Memcached сколько выделить памяти

Обновлено: 05.07.2024


В результате применения информации, данной в этой статье, вы сможете установить и настроить сервер Memcached и нужное расширение php для взаимодействия с ним, а также сервис анализа и статистики phpMemcachedAdmin

Установка будет происходить под Debian с сервером бекенда Apache. Если у вас рабочая связка NGINX + php5-fpm, просто заменяйте в командах apache2 на php5-fpm
Рабочий инструментарий: файловый менеджер для подключения по ssh со встроенным редактором Far Manager или putty.

Для начала, нужно определить, как сконфигурирован PHP (вдруг Memcached уже установлен?)). Для этого в корне сайта временно создадим файл info.php с кодом

Как установить сервер Memcached

Перед установкой нужно обновить репозиторий

Теперь установим memcached и модуль php под него

Идёт установка. После её завершения проверяем, что получилось

В результате мы увидим что-то навроде

Теперь нужно перезагрузить Apache или php-fpm

Настройка Memcached

Теперь, когда сервер установлен, его надо поднастроить. Это не сложно и не займёт много времени

Закрываем Memcached от доступа извне

Как вы видите, memcached висит на 11211 порту по умолчанию. Так как в memcached нет встроенных механизмов аутентификации, то выходит, что любой может подсоединиться извне и использовать его в своих целях. Чтобы избежать этого, вы можете либо закрыть порт 11211 с помощью фаервола, либо сконфигурировать memcached-сервер, чтобы он мог использоваться только с локального хоста. Ниже описан последний способ.

    Открываем конфигурационный файл

И снова проверяем

В итоге мы должны увидеть подобное

Также, после всех изменений не забудьте перезапустить Apache

Увеличиваем объём рабочей памяти Memcached

По умолчанию, в Memcached отведено на использование 64 мегабайта оперативной памяти. Я увеличу до 1024, вы исходите из параметров вашего сервера

  1. Открываем конфигурационный файл
  2. Находим значение
  3. Меняем его на
  4. Перезапускаем memcached

Хранение сессий PHP в Memcached

Если одним сервером или кластером Memcached пользуются несколько разных сайтов, то они могут перехватывать сессии друг друга и получать доступ к аккаунтам их пользователей, что представляет собой потенциальную опасность

Можно ускорить php, перенеся хранилище сессий из hdd в оперативную память с помощью memcached

Вы должны знать, какое расширение php вы используете, memcache или memcached . Между ними есть разница, а уточнить, что стоит у вас, можно с помощью phpinfo(), тут есть тонкость в настройках, будьте внимательны

Способ для расширения memcache

  1. Открыть /etc/php5/mods-available/memcache.ini
  2. Добавить
  3. Перезагрузить apache

Способ для расширения memcacheD

  1. Открыть /etc/php5/mods-available/memcached.ini
  2. Добавить
  3. Перезагрузить apache

Проверка phpinfo

Кстати, также вы можете воспользоваться директивой php_value , чтобы настраивать не весь сервер глобально, а только конкретные сайты. Для этого, вы можете отредактировать .htaccess в корне вашего сайта

Готовый рабочий конфигурационный файл Memcached

Вы также можете настроить всё под свои потребности, конфигурационный файл содержит подробные комментарии:

Установка расширения memcache

Ниже пошагово указаны команды, с помощью которых вы сможете установить php-расширение memcache из консоли вручную

Перезагрузим Apache, чтобы изменения вступили в силу

Как проверить работу Memcached

Создадим в корне сайта файлик memcachetest.php и запишем туда следующий код

Установка и настройка phpMemcachedAdmin

Тут можно пойти несколькими путями: выделить отдельный домен или поддомен под работу этого сервиса. А можно сделать поддиректорию в рабочем сайте и поставить пароль на неё или настроить ограничение по IP. Я опишу последний способ с установкой пароля на папку как более простой.

Создаём директорию и переходим в неё

Скачиваем последнюю версию дистрибутива

Распаковываем и удаляем архив с дистрибутивом

Рекурсивно выставляем нужные права доступа в текущей директории

Создаём .htaccess для авторизации по паролю (в строку 4 вносите свой логин)

Вводите свой пароль.

В заключение

Рекомендую ознакомиться со статьёй про memcached. В ней раскрыта общая информация о нём и некоторые тонкости работы.
На этом всё. Если что непонятно, задавайте вопросы в комментариях

1) Установил Memcache, а затем Memcached PHP Extension.
Какие оптимальные параметры нужно выставить в файле etc/sysconfig/memcached:

55062b7ce764.jpg

Если памяти на VPS:

На сайте, инструкцией которого я воспользовался, были следующие данные:
MAXCONN=»2048″ Максимальное количество подключений
CACHESIZE=»4096″ Количество фактической ОЗУ на сервере
И по аналогии я выставил MAXCONN = 25000, CACHESIZE = 50000. Правильно?

2) Как можно убедиться, что memcache и memcached PHP нормально все кешируют? Может команда есть для ssh или определенная директория, где можно посмотреть.
Заранее спасибо.

Параметры MAXCONN, CACHESIZE и OPTIONS подбираются экспериментальным путем в зависимости от характера нагрузки и от имеющихся ресурсов.

Оценить объем памяти, необходимой для кеширования (параметр CACHESIZE), можно по размеру вашего файлового кеша. Если у вас на проекте файловый кеш занимает 3 GB, то использование memcached c 256МБ памяти не будет эффективным за счет частого вытеснения.

Если же всю память отдать memcached, то остальным ничего не останется.

ivankomolin

Универсального правила настройки нет.
Нужно просто понимать что это за числа:
MAXCONN - это примерно количество одновременных коннектов, которые отработает сервер в шт.
CACHESIZE - размер пространства в ОЗУ в МБ.

Поэтому узнайте сколько у вас свободной ОЗУ, прикиньте сколько можете выделить для memcached и пишите.
Почему-то я сомневаюсь что у вас на VPS 50Гб ОЗУ, поэтому прежде чем писать 50000 выясните этот момент.

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

Memcache работает очень быстро, но эффективность расходования памяти в нем можно повысить. Для того, чтобы это сделать, необходимо разобраться в его структуре хранения данных.


Использование памяти в чанках

memcache чанки

Это свободное пространство и определяет возможность оптимизации Memcache, т.к. размер чанков можно настроить.

Размеры чанков

Для того, чтобы работать с объектами разных размеров Memcache создает несколько разных слабов (квартир в доме), в которых находятся чанки разных размеров (в некоторых побольше, а в некоторых поменьше):


Когда приходит объект покрупнее, Memcache использует чанки из того слаба, в котором они большие. Главное, чтобы размер объекта был меньше, чем размер чанка. Слабы, в которых находятся чанки одинакового размера объединяются в классы (slabclass). Таким образом:

Если у нас большие чанки и много мелких объектов, мы рискуем использовать память очень неэффективно. Если объекты большие и много мелких чанков, то эти чанки не будут использованы. В обоих случаях мы не используем все место, которое можем.

Настройка размеров чанка


В Memcache настройка размеров чанков и их количества производится с помощью фактора роста. Это соотношение размера большего чанка к меньшему:

Так при факторе роста в 1.25 будет такое распределение классов:

Параметры Memcache

Для настройки используется два параметра во время запуска сервера Memcached:

  • Фактор роста
  • Минимальный размер чанка (с которого начинается прирост)

Этот параметр следует уменьшить до 16, если у Вас в кэше есть мелкие объекты, например:

  • счетчики
  • флаги
  • короткие строчные значения (имейлы, пароли, хеши и т.п.)

Дополнительная оптимизация памяти

Вытеснения

Когда Memcache доходит до ограничения в памяти, он начинает удалять объекты по принципу LRU. Количество удаленных объектов фиксируются в параметре evictions внутренней статистики:

Самое важное

Highload нужны авторы технических текстов. Вы наш человек, если разбираетесь в разработке, знаете языки программирования и умеете просто писать о сложном!
Откликнуться на вакансию можно здесь .

Memcached использует механизм под названием Slab Allocator для распределения и управления памятью по умолчанию. До появления этого механизма выделение памяти осуществлялось простым malloc и освобождением всех записей. Однако этот метод вызовет фрагментацию памяти, увеличит нагрузку на диспетчер памяти операционной системы и, в худшем случае, приведет к тому, что операционная система будет работать медленнее, чем сам процесс memcached. Slab Allocator был создан для решения этой проблемы.

Основной принцип Slab Allocator заключается в распределении памяти по страницам в соответствии с заранее определенным размером.По умолчанию размер страницы составляет 1 МБ, который можно указать при запуске с помощью параметра -I и разделить на фрагменты разного размера. И разделите блоки одинакового размера на группы (коллекции кусков) .Если требуется использовать память, memcached разделит новую страницу и разместит ее в требуемой области плиты. После того, как страница будет выделена, она не будет повторно использоваться или перераспределяться перед перезапуском, чтобы решить проблему фрагментации памяти.


Пространство памяти, выделенное для Slab, по умолчанию составляет 1 МБ. После размещения на плите, она делится на куски в соответствии с размером плиты.

Chunk

Пространство памяти, используемое для кэширования записей.

Slab Class

Группа фрагментов определенного размера.

2.2. Конкретный процесс подачи новых данных выглядит следующим образом:



На каждом слэбе хранятся только данные, которые больше, чем размер блока в предыдущем слэбе, и меньше или равны его собственному размеру. В соответствии с размером полученных данных memcached выбирает наиболее подходящую плиту для размера данных. Каждый фрагмент в 1,25 раза больше размера фрагмента предыдущей плиты. Фактор роста можно изменить с помощью -f.

2.3 Потеря памяти

Размер фрагмента в каждом слэбе одинаков.Как показано на рисунке выше, размер фрагмента slab1 составляет 88 байтов, а размер фрагмента slab2 - 112 байтов. Поскольку выделенная память имеет определенную длину, выделенная память не может использоваться эффективно.


3. Просмотр состояния и производительности кэша памяти.

3.1 Коэффициент попадания: команда статистики


Частота попаданий = get_hits / (get_hits + get_misses)

3.2 Наблюдайте за статусом элементов в каждой плите: команда Stats items

Описание основного параметра:
outofmemory Сколько раз классу плиты не удалось выделить место для нового элемента. Это означает, что вы вводите -M или операция удаления не удалась
number Общее количество сохраненных данных
age Самые длинные сохраненные данные в сохраненных данных время, в секундах
evicted Количество раз, когда неистекшие элементы нужно было удалить из LRU
evicted_time Количество секунд, прошедших с момента последней очистки просроченного элемента, то есть время последнего удаления кеша. 0 означает, что он был удален в настоящее время. Используйте это, чтобы определить время последнего удаления данных.
evicted_nonzero Срок действия не установлен (по умолчанию 30 дней), но количество раз, когда неистекший элемент должен был быть удален из LRU

Стратегия LRU не для всех плит, а только для плит, на которых должны быть размещены новые данные.

3.3 Наблюдайте за положением каждой плиты: команда stats slabs

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

Описание основного параметра:
Имя атрибута Описание недвижимости
chunk_size Размер каждого куска текущего перекрытия
chunk_per_page Количество фрагментов, которые можно сохранить на каждой странице.
total_pages Общее количество страниц, выделенных текущему блоку. Размер страницы по умолчанию - 1 МБ, размер блока можно рассчитать.
total_chunks Максимальное количество блоков, которые может хранить текущий блок, должно быть равно chunk_per_page * total_page
used_chunks Общее количество уже занятых блоков
free_chunks Количество блоков, освобожденных из-за просроченных данных, но еще не использованных
free_chunks_end Количество вновь выделенных блоков, которые не использовались
active_slabs Общее количество активных плит
total_malloced Фактический общий объем выделенной памяти в байтах, это значение определяет, какой объем памяти memcached может фактически применяться. Если это значение достигло установленного верхнего предела (по сравнению с maxbytes в настройках статистики), новой страницы не будет. Быть назначенным.

total_chunks = used_chunks + free_chunks + free_chunks_end

3.4 Статистика количества объектов:

Примечание. Эта команда заблокирует службу и приостановит обработку запроса. Информация возвращает два столбца, первый столбец - это размер элемента, а второй столбец - это номер элемента.

3.5 Просмотр и экспорт ключа: кэширование статистики

3.5.1 Сначала перечислите элементы:
3.5.2 Получите ключ через itemid, идентификатор выше 29, плюс параметр: длина списка, 0 для всех списков.

Команда экспорта в файл

4. Анализ случая

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

Интеллектуальная рекомендация


WECHAT MILLY WAY POINT CAMENT CARD - СОВРЕМЕННЫЕ СТРАНИЦЫ ПРОГЛЯЮТНОЕ ЗНАЧЕНИЕ (Запрос)

WECHAT Small Pass Pass Value и значение приобретения: 1. Установите способ настройки идентификатора идентифицирует значение параметра, передаваемое после прыжка; 2, используя метод Data-XXXX для идент.


Текущая задача Узел больше экземпляров


[Linux] Программирование сетевых сокетов UDP

Что такое протокол UDP Протокол UDP называетсяПротокол пользовательских датаграмм UDP - протокол транспортного уровня Без установления соединения, ненадежная передача, ориентированная на дейтаграмму П.



Основная идея обработки больших данных - разделяй и властвуй

Разделяй и властвуй - «разделяй и властвуй» Как мы все знаем, компьютеры очень быстрые и используются людьми. Однако независимо от того, насколько быстрым является компьютер, способность о.

Читайте также: