Memcached è un daemon piuttosto semplice da configurare e istallare.
Sui sistemi Debian e derivati memcached può essere istallato con
sudo aptitude install memcached
altrimenti si può ricorrere ai sistemi di pacchettizzazione delle altre architetture o direttamente ai sorgenti rilasciati dagli sviluppatori.
Se si istalla da pacchetto debian a valle dell’istallazione verrà lanciato un daemon che, come risulta da ps aux, sarà:
/usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1
La configurazione completa sarà invece in
/etc/memcached.conf
Analizziamo i parametri di avvio
-l: l’ip su cui il demone è in ascolto
-p: la porta TCP su cui il demone è in ascolto
-m: la quantità di memoria (in MB) che viene assegnata al demone memcached
e non visibili perché con impostazioni di default (ma riportati sul file di configurazione)
-d: memcached viene lanciato in modalità demone e quindi rilascia il controllo all’ambiente che lo ha avviato
logfile: path del file di log
-c: numero massimo di connessioni contemporanee accettate
-M: ritorna errore nel caso non ci sia memoria disponibile
-v: incremento del livello di dettaglio nei log
-vv: ulteriore incremento del livello di dettaglio nei log
I più imprtanti per il tooning sono ovviamente -m, -c e -M. Nel determinare il primo bisogna tener conto che se l’uso di memcached fa si che il server debba appoggiarsi sullo swap l’effetto complessivo sarà con ogni probabilità quello di peggiorare le prestazioni.
Vale la pena spendere due parole su -M; di default memcached quando non ha più spazio disponibile sovrascrive i valori più vecchi e meno utilizzati. Questo viene indicato come evictions nei report e nella documentazione. Se questo sia accettabile o no dipende da considerazione sull’applicazione che si sta realizzando ma è in genere molto ragionevole per della cache. -M permette di cambiare questo comportamento nel caso dovesse essere necessario.
Per connettersi ad un server memcached è possibile utilizzare un semplice telnet:
telnet localhost 11211
Una volta connessi si possono in teoria eseguire tutte le operazioni; ad esempio salvare una variabile
set pluto 123 0 3
o
dove viene detto di salvare nella variabile pluto il valore o. 123 è un numero arbitrario usato nel protocollo di comunicazione, 0 il tempo di expire del valore (in questo caso infinito) e 3 la dimensione dei dati che verranno inviati.
Si può poi rileggere lo stesso valore con un
get pluto
Attenzione che anche un solo spazio in più fa fallire l’esecuzione del comando.
Questo uso con telnet è paragonabile all’invio della posta con lo stesso strumento ma rimane utile per test e troubleshooting. Qualsiasi uso applicativo deve passare attraverso un’apposita libreria in un qualche linguaggio (php, perl…). Oltretutto a questa libreria sono completamente demandate le funzionalità necessarie per l’uso in cluster.
Il telnet inoltre permette di accedere a ben quattro report molto dettagliati sullo stato interno del daemon:
stats
stats items
stats slabs
stats sizes
Questi quattro comandi sono alla base di report più ad alto livello. Decisamente più maneggevole è ad esempio memcache-top. Questo permette di avere un’istantanea molto comprensibile dello stato di un pool e dell’efficacia dell’uso che se ne fa:
memcache-top –commands –instance=serv1:port1[,serv2:port2…]
il report sarà qualche cosa come:
memcache-top v0.5 (default port: 11211, color: on, refresh: 3 seconds)
INSTANCE USAGE HIT % CONN TIME EVICT READ WRITE
serv1:port1 90% 80% 800 0.6ms 20 10G 20G
serv2:port2 90% 80% 700 0.5ms 10 15G 30G
…
AVERAGE: 90% 80% 750 0.5ms 15 12.5G 25G
TOTAL: 2GB 1500 11.0ms 30 25G 50G
(ctrl-c to quit.)
Questo report, se non specificato diversamente, viene rigenerato ogni 3s e si riferisce a questo intervallo temporale.