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

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

Поэтому я запустил следующий PHP-код.

 $ memcache = новый Memcache;
     $ Memcache-> подключения ( "локальный", 11211);
     $ Memcache-> заподлицо ();
     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 ) 

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

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

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

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

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

Пример:

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

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

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

Попробуй это

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