Memcache не будет скрывать или очищать память

Я пытаюсь очистить свой memcache, поскольку я замечаю, что хранилище занимает почти 30% памяти сервера при использовании ps -aux.

Итак, я запустил следующий PHP-код.

$memcache = new Memcache;
    $memcache->connect("localhost",11211);
    $memcache->flush();
    print_r($memcache->getStats());

В результате вывод

(
    [pid] => 4936
    [uptime] => 27318915
    [time] => 1255318611
    [version] => 1.2.2
    [pointer_size] => 64
    [rusage_user] => 9.659531
    [rusage_system] => 49.770433
    [curr_items] => 57864
    [total_items] => 128246
    [bytes] => 1931734247
    [curr_connections] => 1
    [total_connections] => 128488
    [connection_structures] => 17
    [cmd_get] => 170288
    [cmd_set] => 128246
    [get_hits] => 45464
    [get_misses] => 124824
    [evictions] => 1009
    [bytes_read] => 5607431213
    [bytes_written] => 1806543589
    [limit_maxbytes] => 2147483648
    [threads] => 1
)

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

Ответ 1

Вам действительно нужно изменить параметры memcached, чтобы он не использовал столько памяти. Когда вы запустите memcached, вы можете передать ему объем памяти, который он должен использовать, в мегабайтах, используя флаг -m. Подробнее см. ее документацию.

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

Ответ 2

Колин, Команда Flush All приводит к тому, что кеш устанавливает все текущие времена эксперимента. Следующий запрос существующего ключа ничего не вернет, и запись будет удалена из кеша. Поскольку у Memcached нет отдельного процесса для очистки истекших элементов и использует метод "Lazy", который делает процесс очень легким и эффективным, однако из-за этого, если вам нужно фактически удалить кеш и начать с нуля, единственный реальный способ выполните это, чтобы перезапустить Memcached. Должна долгая работа, чтобы сбросить все ваши ключи, отправить команду "Сбросить все", затем пропустить каждую клавишу, запускающую "против", что приведет к удалению записи. Я не знаю, на 100%, если бы этот метод работал, но теоретически звучит правдоподобно.

Ответ 3

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

Пример:

$memcache->flush();

$time = time()+1; //one second future
while(time() < $time) {
//sleep
}
$memcache->set('key', 'value'); // repopulate the cache 

Посмотрите этот пост, проблема с флешем memcache

Ответ 4

На самом деле, самый простой способ освободить все значения - это перезапустить экземпляр memcached.

Ответ 5

Попробуйте это

Mage:: приложение() → getCacheInstance() → getFrontend() → getBackend() → чистый (Zend_Cache:: CLEANING_MODE_ALL);