Intereting Posts
Нет заголовка «Access-Control-Allow-Origin» – Laravel 5.4 Что такое допустимые и читаемые подходы к комментариям в PHP5? Передаются ли объекты PHP5 по ссылке? Графические диаграммы для HTML-задач Доступ к произвольно глубокому ключу в многомерном массиве Как обернуть каждую новую строку в textarea с помощью тегов li? PHP $ .ajax используется для объединения ввода из предыдущих полей формы на странице – некоторые проблемы php ssl curl: ошибка перемещения объекта WooCommerce – Получить выбранный вариант для продукта в корзине Apache – «Невозможно инициализировать модуль» из-за того, что API модуля и PHP не соответствуют после изменения конфигурации PHP Объединение Laravel 4.2 Как вы отслеживаете файлы в SMB с помощью приложения? Изменение API погоды Google от F до C Получить Nginx для вызова файла PHP для обработки 404 ошибок в php-fpm Как обновить определенную строку, используя флажки

Memcached: как прервать ограничение при извлечении всех ключей

Из-за того, что я не смог найти надежную программу в сети, которая извлекает все ключи memcache после подсчета ключей в slab> 500k, я хотел написать свою собственную программу на PHP.

Затем я понял, что есть причина, по которой все программы действительно не работали для этого большого количества ключей.

Когда я читаю ключи со stats cachedump <slab-id> <limit> он возвращает только определенное количество ключей, которое заканчивается – в моем случае – примерно на 30k.

Как я могу получить хотя бы эти 500 тыс., Которые могут быть в одной плите?

Все «сообщения» и «ответы», которые предлагают использовать memdump , не работают. У них тоже есть это ограничение.

Я использую memcached 1.4.25

После отладки memcached источника я понял, что ограничение находится в items.c / item_cachedump() вызванном этой строкой:

 unsigned int memlimit = 2 * 1024 * 1024; /* 2MB max response size */ 

Из-за этого назначения выделенный буфер ограничивает количество возвращаемых ключей, потому что общая длина всех ключей [включая \r\n после каждого имени ключа] не должна превышать этот размер.

Я мог бы решить для моего случая проблему таким образом, что я изменил ее на:

 unsigned int memlimit = 128 * 1024 * 1024; 

и перекомпиляция memcached . Теперь я могу читать около 700 тыс. Ключей [у меня не было больше клавиш для максимальной функции].

Я узнал, что очень высокая ценность делает систему нестабильной. При значении 500 * 1024 * 1024 [экв. 500 МБ] моя система почти разбилась с такими сообщениями:

shell-init: ошибка получения текущего каталога: getcwd: не может обращаться к родительским каталогам: нет такого файла или каталога

Даже у моего сервера 5 ГБ оперативной памяти, я действительно не понимаю, почему, но в итоге значение 128 МБ является полезной величиной.

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