2009-10-12 26 views
11

Ho cercato di cancellare il mio memcache poiché sto notando che lo storage occupa quasi il 30% della memoria del server quando si utilizza ps -aux.Memcache non svuota o cancella la memoria

Così ho eseguito il seguente codice php.

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

Il risultato è la produzione di

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

Questo dovrebbe essere abbastanza semplice, ma chiaramente, mi manca qualcosa.

risposta

16

È davvero necessario modificare le impostazioni memcached in modo che non consuma tutta la memoria. Quando si avvia memcached, è possibile passare la quantità di memoria che dovrebbe utilizzare, in megabyte, utilizzando il flag -m. Vedi its documentation per informazioni.

flush invalida semplicemente tutti gli elementi nella cache, non comanda memcached per deallocare o annullare la prenotazione della memoria che sta utilizzando. Dubito che tu possa comandare memcached per deallocare la memoria che sta usando.

+0

Grazie James. Questo lo chiarisce. Ho dato un sacco di memoria a memcache, ma apparentemente molto più del necessario. Riavvio del memcache con impostazioni inferiori. – pedalpete

+0

Prego. –

+0

Questa è ancora una domanda valida però .. Sono in un ambiente condiviso che utilizza un server memcache per Magento e sembra che quanto sopra non funzioni! Non ho i privilegi per riavviare il server, ma la cache sporca deve andare prima che il mio sito funzioni correttamente, quindi per il momento sono bloccato con una cache di file. – ColinM

11

Colin, Il comando Svuota tutto fa in modo che la cache imposti tutti i tempi di prova a corrente. La richiesta successiva per una chiave esistente non restituirà nulla e il record verrà rimosso dalla cache. Poiché Memcached non ha un processo separato per pulire gli elementi scaduti e utilizza un metodo "Lazy" che rende il processo molto leggero ed efficiente, tuttavia a causa di questo se è necessario rimuovere effettivamente la cache e iniziare da zero l'unico vero modo di realizzare questo è quello di riavviare Memcached. Una lunga soluzione sarebbe quella di scaricare tutte le tue chiavi, Invia il comando Flush All, quindi eseguire il ciclo di ogni tasto che esegue una contromossa causando la rimozione del record. Non so per il 100% se questo metodo funzionasse, ma in teoria sembra plausibile.

-5

Prova questo

Mage :: app() -> getCacheInstance() -> getFrontend() -> getBackend() -> pulito (Zend_Cache :: CLEANING_MODE_ALL);

2

È necessario attendere almeno 1 secondo dopo aver cancellato memcache. in caso contrario, gli elementi aggiunti meno di un secondo si annullano automaticamente.

Es:

$memcache->flush(); 

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

un'occhiata a questo post, memcache flush issue

+0

questo mi ha aiutato, ma invece di usare mentre si potrebbe semplicemente usare 'sleep (1)' questo è più cpu friendly e, naturalmente, più leggibile. – Roey

0

In realtà, il modo più semplice per rilasciare tutti i valori è riavvio esempio memcached.

+0

Questa NON è una buona idea.Se si dispone di un sito Web estremamente impegnato, il riavvio di memcache può effettivamente causare problemi. Ad esempio, eseguo un sito Wordpress con 1.000 visitatori contemporaneamente. Se riavvio il cluster memcache il backend MySQL non può servire i dati abbastanza velocemente e WordPress pensa che sia una nuova installazione. Sempre FLUSH se possibile. Riavvia solo se non altra scelta. – frustratedtech

+0

D'accordo, devi sempre sapere cosa stai facendo. – mulya

Problemi correlati