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);