Redis кеш под WordPress сожрал всю память, что делать?

Ссылка скопирована
1 ответ

Всем привет!

Думаю про плагин Object Cache Pro для WordPress слышали все, кто в теме.

У меня возник следующий вопрос про использование выделенной памяти: я установил для Redis 128 мегабайт. Оно постепенно начало её заполнять и спустя пару дней уже заняло 127 Мб. У меня на сайте около 3 тысяч товаров, 20 страниц, куча записей, в общем, база данных весит около 1 ГБ.

Я так понимаю, что ему сколько не выдели памяти - он всё сожрет? Как быть, добавить ещё или просто периодически очищать его?

Дополнительно

Refguser @Refguser Делаю ИМ и другие решения Нет поводов для волнений, но можно увеличить объём памяти для редиса (см в конце.)

Насколько будет заполнение кеша зависит от настроек (что кешировать. на сколько и тп), трафика и пр. и будет ровно столько сколько нужно для эффективной работы сайта, но не больше выделенного.

Не по вопросу:

У меня на сайте около 3 тысяч товаров, 20 страниц, куча записей, в общем, база данных весит около 1 ГБ.

Вангую база не оптимизирована. У моего клиента товаров побольше (включая вариации), но база немногим больше 500мб.

А вот у того же клиента вывод redis-cli info memory

>redis-cli info memory # Memory used_memory:141958480 used_memory_human:135.38M used_memory_rss:173039616 used_memory_rss_human:165.02M used_memory_peak:635899776 used_memory_peak_human:606.44M used_memory_peak_perc:22.32% used_memory_overhead:1240328 used_memory_startup:809688 used_memory_dataset:140718152 used_memory_dataset_perc:99.69% allocator_allocated:142341576 allocator_active:145608704 allocator_resident:155316224 total_system_memory:25203458048 total_system_memory_human:23.47G used_memory_lua:41984 used_memory_lua_human:41.00K used_memory_scripts:0 used_memory_scripts_human:0B number_of_cached_scripts:0 maxmemory:0 maxmemory_human:0B maxmemory_policy:noeviction allocator_frag_ratio:1.02 allocator_frag_bytes:3267128 allocator_rss_ratio:1.07 allocator_rss_bytes:9707520 rss_overhead_ratio:1.11 rss_overhead_bytes:17723392 mem_fragmentation_ratio:1.22 mem_fragmentation_bytes:31143136 mem_not_counted_for_evict:0 mem_replication_backlog:0 mem_clients_slaves:0 mem_clients_normal:311440 mem_aof_buffer:0 mem_allocator:jemalloc-5.2.1 active_defrag_running:0 lazyfree_pending_objects:0

>redis-cli info memory # Memory used_memory:141958480 used_memory_human:135.38M used_memory_rss:173039616 used_memory_rss_human:165.02M used_memory_peak:635899776 used_memory_peak_human:606.44M used_memory_peak_perc:22.32% used_memory_overhead:1240328 used_memory_startup:809688 used_memory_dataset:140718152 used_memory_dataset_perc:99.69% allocator_allocated:142341576 allocator_active:145608704 allocator_resident:155316224 total_system_memory:25203458048 total_system_memory_human:23.47G used_memory_lua:41984 used_memory_lua_human:41.00K used_memory_scripts:0 used_memory_scripts_human:0B number_of_cached_scripts:0 maxmemory:0 maxmemory_human:0B maxmemory_policy:noeviction allocator_frag_ratio:1.02 allocator_frag_bytes:3267128 allocator_rss_ratio:1.07 allocator_rss_bytes:9707520 rss_overhead_ratio:1.11 rss_overhead_bytes:17723392 mem_fragmentation_ratio:1.22 mem_fragmentation_bytes:31143136 mem_not_counted_for_evict:0 mem_replication_backlog:0 mem_clients_slaves:0 mem_clients_normal:311440 mem_aof_buffer:0 mem_allocator:jemalloc-5.2.1 active_defrag_running:0 lazyfree_pending_objects:0

Ида. Тут используется W3T. У него наиболее тонкие возможности настроек.

  • Многие используют W3 Total Cache, он наверное лучше?
  • Богдан Герасименко, каждому своё. Не все обладают знаниями чтобы его грамотно настроить.

Ответы:

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

1 ГБ - это слабая загруженность, на самом деле. Такой объём можно полностью уместить в Redis или Tarantool. Роман Страх @Kypidon4ik Фрилансер, Wordpress developer Такая же ситуация была, с хостером решали этот вопрос вместе. Сайт с 200к+ записями. Нам в какой-то момент 32 гб стало мало при TTL кеша редис в 86400. Было решено просто добавить еще 1 плашку на 32 гб.
PS Скажу сразу что редис очень не любит когда его ограничивают в ОЗУ. При ограничении в ОЗУ начинает страдать ЦП. Замкнутый круг получается.
Итог: или откажитесь от объектного кеша или разрешите брать столько ОЗУ сколько надо или попробуйте уменьшить TTL кеша (но это тоже спорно)

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Кирилл JS Ответ

То, что Redis постепенно занял почти весь лимит 128 МБ, само по себе не означает проблему. Redis cache обычно так и работает: заполняет выделенную память объектами, а затем вытесняет старые ключи по политике eviction. Важно не «пустой Redis», а чтобы не было ошибок OOM command not allowed и чтобы политика вытеснения была настроена.

Проверьте:

redis-cli INFO memory
redis-cli CONFIG GET maxmemory
redis-cli CONFIG GET maxmemory-policy

redis-cli INFO memory redis-cli CONFIG GET maxmemory redis-cli CONFIG GET maxmemory-policy

Для object cache обычно нужна политика вроде:

maxmemory-policy allkeys-lru

maxmemory-policy allkeys-lru

или:

maxmemory-policy allkeys-lfu

maxmemory-policy allkeys-lfu

Если стоит noeviction, Redis при заполнении памяти начнёт отказывать в записи, и сайт может работать хуже.

Для WooCommerce с 3000 товаров 128 МБ может быть мало, особенно если много вариаций, фильтров, запросов и объектный кэш хранит большие массивы. Можно увеличить до 256-512 МБ, но сначала посмотрите hit rate и evicted keys.

Также проверьте, нет ли в кэше огромных transient/query результатов. Иногда плагины складывают в object cache большие ответы API, RSS или массивы товаров. Redis должен ускорять сайт, а не становиться мусорным хранилищем.

Итог: настройте eviction policy, смотрите used_memory, evicted_keys, keyspace_hits/misses. Если ошибок нет, заполнение памяти до лимита — нормальное поведение.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно