2009-10-12 12 views
11

He intentado borrar mi Memcache ya que estoy notando que el almacenamiento ocupa casi el 30% de la memoria del servidor cuando usa ps -aux.Memcache no borrará o borrará la memoria

Así que ejecuté el siguiente código php.

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

Esto da lugar a la salida de

(
    [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 
) 

Esto debería ser bastante básico, pero está claro que me falta algo.

Respuesta

16

Realmente necesita cambiar la configuración de memcached para que no consuma tanta memoria. Cuando inicie Memcached, puede pasarle la cantidad de memoria que debería usar, en megabytes, utilizando el indicador -m. Vea its documentation para más información.

flush simplemente invalida todos los elementos en la memoria caché, no ordena a memcached que desasigne o anule la reserva de la memoria que está utilizando. Dudo que pueda ordenar que Memcached desasigne la memoria que está utilizando.

+0

Gracias James. Eso lo aclara. A propósito le di mucha memoria a Memcache, pero aparentemente mucho más de lo que necesitaba. Voy a reiniciar la memcache con configuraciones más bajas. – pedalpete

+0

De nada. –

+0

Esto sigue siendo una pregunta válida. Estoy en un entorno compartido que usa un servidor Memcache para Magento y parece que lo anterior no funciona. No tengo privilegios para reiniciar el servidor, pero la caché sucia tiene que transcurrir antes de que mi sitio funcione correctamente, así que por el momento estoy atascado con un caché de archivos. – ColinM

11

Colin, El comando Flush All hace que la memoria caché configure todos los tiempos de espera en el actual. La siguiente solicitud de una clave existente no arrojará nada y el registro se eliminará de la memoria caché. Dado que Memcached no tiene un proceso separado para limpiar los elementos caducados y utiliza un método "Lazy" que hace que el proceso sea muy liviano y eficiente, sin embargo, debido a esto, si necesita eliminar realmente el caché y comenzar desde cero, la única forma real de hacerlo lograr esto es reiniciar Memcached. Un largo trabajo sería tirar todas las llaves, Enviar el comando Flush All, luego recorrer cada tecla ejecutando un get contra el mismo para que el registro sea eliminado. No sé por 100% si este método funcionaría pero en teoría suena plausible.

-5

Prueba este

Mago :: aplicación() -> getCacheInstance() -> getFrontend() -> getBackend() -> limpia (Zend_Cache :: CLEANING_MODE_ALL);

2

Debes esperar al menos 1 segundo después de borrar Memcache. de lo contrario, los elementos agregados en menos de un segundo se invalidarán a sí mismos.

Ex:

$memcache->flush(); 

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

mirada a este post, memcache flush issue

+0

esto me ayudó, pero en lugar de usar mientras que usted podría simplemente usar 'sleep (1)' esto es más amigable con la CPU y, por supuesto, más legible. – Roey

0

En realidad, la forma más fácil de anular la planificación de todos los valores es instancia de memcached reinicio.

+0

Esto NO es una buena idea.Si tienes un sitio web extremadamente ocupado, reiniciar Memcache en realidad puede causar problemas. Por ejemplo, corro un sitio de Wordpress con 1,000 visitantes concurrentemente. Si reinicio el clúster de Memcache, el backend de MySQL no puede servir datos lo suficientemente rápido y WordPress piensa que es una instalación nueva. Siempre FLUSH si es posible. Reinicie solo si no hay otra opción. – frustratedtech

+0

De acuerdo, siempre debe saber lo que está haciendo. – mulya

Cuestiones relacionadas