Ich teste mit Memcached, um Django-Ansichten zwischenzuspeichern. Wie kann ich feststellen, ob memcached tatsächlich etwas von der Linux-Befehlszeile zwischenspeichert?
quelle
Ich teste mit Memcached, um Django-Ansichten zwischenzuspeichern. Wie kann ich feststellen, ob memcached tatsächlich etwas von der Linux-Befehlszeile zwischenspeichert?
Ich weiß, dass diese Frage alt ist, aber hier ist ein weiterer nützlicher Ansatz zum Testen von Memcached mit Django:
Wie bei @Jacob erwähnt, können Sie memcached im sehr ausführlichen Modus starten (nicht als Daemon):
memcached -vv
Um Ihre Django-Cache-Konfiguration zu testen, können Sie die Low-Level-Cache-API verwenden.
Starten Sie zuerst den Python-Interpreter und laden Sie Ihre Django-Projekteinstellungen:
python manage.py shell
Über die Shell können Sie die Cache-API auf niedriger Ebene verwenden, um Ihren Memcache-Server zu testen:
from django.core.cache import cache
cache.set('test', 'test value')
Wenn Ihre Cache-Konfiguration korrekt ist, sollte die Ausgabe im Memcache ähnlich aussehen:
<32 set :1:test 0 300 10
>32 STORED
Sie können das offizielle Perl-Skript verwenden:
memcached-tool 127.0.0.1:11211 stats
Oder verwenden Sie einfach Telnet und den Befehl stats, z.
# telnet localhost [memcacheport] Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. stats STAT pid 2239 STAT uptime 10228704 STAT time 1236714928 STAT version 1.2.3 STAT pointer_size 32 STAT rusage_user 2781.185813 STAT rusage_system 2187.764726 STAT curr_items 598669 STAT total_items 31363235 STAT bytes 37540884 STAT curr_connections 131 STAT total_connections 8666 STAT connection_structures 267 STAT cmd_get 27 STAT cmd_set 30694598 STAT get_hits 16 STAT get_misses 11 STAT evictions 0 STAT bytes_read 2346004016 STAT bytes_written 388732988 STAT limit_maxbytes 268435456 STAT threads 4 END
quelle
memcached-tool 127.0.0.1:11211 stats
- Sie müssen nicht telnet./usr/share/memcached/scripts/memcached-tool
./usr/share/memcached/scripts/memcached-tool /tmp/memcached.sock stats
oder/usr/share/memcached/scripts/memcached-tool /var/run/memcached/memcached.sock stats
(Steckdose)Starten Sie memcache nicht als Daemon, sondern als normal, also führen Sie es einfach
memcached -vv
sehr ausführlich aus. Sie werden sehen, wann Get's und Sets auf dem Memcache-Server eingehen.quelle
Ein einfacher Weg, um die Memcache-Funktion zu testen, bestand darin, auf jeder bereitgestellten Seite einen auskommentierten Zeitstempel einzugeben. Wenn der Zeitstempel bei mehreren Anforderungen an eine Seite gleich blieb, wurde die Seite vom Memcache zwischengespeichert.
In den Django-Einstellungen habe ich auch den Cache-Mechanismus so eingerichtet, dass ein Dateicache im Dateisystem verwendet wird (sehr langsam), aber nachdem ich die Seiten aufgerufen habe, konnte ich feststellen, dass tatsächlich Cache-Dateien im Dateipfad abgelegt wurden, um zu bestätigen, dass das Caching durchgeführt wurde aktiv in Django.
Ich habe beide Schritte verwendet, um mein Caching-Problem zu lösen. Ich hatte das Caching in Django eigentlich nicht richtig aktiviert. Die neuere Methode zum Aktivieren des Caching verwendet die Middleware 'django.middleware.cache.CacheMiddleware' (nicht die Middleware mit zwei Middleware-Teilen, bei denen es sich um die erste / letzte Middleware-Einstellung handeln muss.)
quelle
Memcached kann tatsächlich selbst in eine Protokolldatei schreiben, ohne sie manuell neu starten zu müssen. Das
/etc/init.d/memcached
Init-Skript (/usr/lib/systemd/system/memcached.service
auf EL7 +; ugh) kann memcached mit den in/etc/memcached.conf
(oder/etc/sysconfig/memcached
auf EL5 +) angegebenen Optionen aufrufen. Zu diesen Optionen gehören Ausführlichkeit und Protokolldateipfad.Kurz gesagt, Sie müssen nur diese beiden Zeilen zu dieser conf / sysconfig-Datei hinzufügen (oder auskommentieren) ...
-vv logfile /path/to/log
... und starten Sie den Daemon mit
service memcached restart
(EL3-7) oder/etc/init.d/memcached restart
(debuntus) neuUnd dann können Sie dieses Protokoll auf herkömmliche Weise überwachen, wie
tail -f /path/to/log
zum Beispiel.quelle
Um die Antwort von Node zu erweitern, können Sie
socat UNIX-CONNECT:/var/run/memcached.sock STDIN
einen Unix-Socket debuggen.Beispiel:
$ socat UNIX-CONNECT:/var/run/memcached.sock STDIN stats STAT pid 931 STAT uptime 10 STAT time 1378574384 STAT version 1.4.13 STAT libevent 2.0.19-stable STAT pointer_size 32 STAT rusage_user 0.000000 STAT rusage_system 0.015625 STAT curr_connections 1 STAT total_connections 2 STAT connection_structures 2
quelle
Versuchen Sie in der Befehlszeile den folgenden Befehl:
echo stats | nc 127.0.0.1 11211
Wenn nichts zurückgegeben wird, wird der Memcache nicht ausgeführt. Andernfalls sollte eine Reihe von Statistiken einschließlich der Verfügbarkeit (und der Anzahl der Treffer und Fehler) zurückgegeben werden.
Der Referenzartikel ist hier, https://www.percona.com/blog/2008/11/26/a-quick-way-to-get-memcached-status/
So sehen Sie alle 2 Sekunden Änderungen:
watch "echo stats | nc 127.0.0.1 11211"
quelle
subprocess.Popen('echo stats | nc 127.0.0.1 11211', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE )
In Bash können Sie die Statistik von memcache mit diesem Befehl überprüfen:
exec 3<>/dev/tcp/localhost/11211; printf "stats\nquit\n" >&3; cat <&3
Verwenden Sie den folgenden
memflush
Befehl, um den Cache zu leeren:echo flush_all >/dev/tcp/localhost/11211
und überprüfen Sie, ob die Statistiken erhöht wurden.
Dump alle die im Cache gespeicherten Objekte, Verwendung
memdump
odermemcdump
Befehl (Teilmemcached
/libmemcached
Paket):memcdump --servers=localhost:11211
oder:
memdump --servers=localhost:11211
Wenn Sie PHP verwenden, überprüfen Sie, ob unterstützt wird :
php -i | grep memcached
.Rückverfolgung
Um zu überprüfen, welcher zwischengespeicherte Prozess genau verarbeitet wird, können Sie dafür Netzwerk-Sniffer oder -Debugger (z. B.
strace
unter Linux oderdtrace
/dtruss
unter Unix / OS X) verwenden. Überprüfen Sie einige Beispiele unten.Strace
sudo strace -e read,write -fp $(pgrep memcached)
Um die Ausgabe besser zu formatieren , aktivieren Sie Folgendes : Analysieren Sie Strace in Shell in einfachen Text.
Dtruss
Dtruss ist ein Dtrace-Wrapper, der auf Unix-Systemen verfügbar ist. Führen Sie es aus als:
sudo dtruss -t read -fp $(pgrep memcached)
Tcpdump
sudo tcpdump -i lo0 -s1500 -w- -ln port 11211 | strings -10
quelle
yum install memdump
und das ist fehlgeschlagen.memdump
ist Teil vonmemcached
(oderlibmemcached
), also versuche :yum install memcached
.memcdump
.Sie können memcached oder einen beliebigen Server mit dem folgenden Skript testen
lsof -i :11211 | grep 'LISTEN'>/dev/null 2>/dev/null;echo $?
Wenn 0 zurückgegeben wird, wird der Server tatsächlich ausgeführt, oder wenn 1 nicht, wenn Sie wissen möchten, dass der Server tatsächlich an einem Port ausgeführt wird, verwenden Sie das folgende Skript
lsof -i :11211 | grep 'LISTEN'>/dev/null 2>/dev/null; if [ $? -eq 0]; then echo "Your memcache server is running" else echo "No its not running" fi
quelle
Können Sie Curl verwenden, um eine Seite einige hundert Mal abzurufen und die Ergebnisse zeitlich abzustimmen? Sie können auch einen Prozess auf dem Server ausführen, der dabei eine hohe CPU- / Festplattenlast simuliert.
quelle
Ich habe ein
expect
Skript geschriebenis-memcached-running
, das testet, ob memcached auf einer Host / Port-Kombination ausgeführt wird (ausführen alsis-memcached-running localhost 11211
):#! /usr/bin/env expect set timeout 1 set ip [lindex $argv 0] set port [lindex $argv 1] spawn telnet $ip $port expect "Escape character is '^]'." send stats\r expect "END" send quit\r expect eof
Wenn Sie Ihr System nach einer
Makefile
Regel ausführen , können Sie Ihren Start von einem Make-Ziel abhängig machen, das bestätigt, dass es betriebsbereit ist (oder Ihnen dabei hilft, diesen Status zu erhalten). Es ist ausführlich, wenn die Prüfung es uns nicht leicht macht, fehlgeschlagene CI-Läufe zu debuggen, Memcached installiert, wenn es fehlt, und ist kurz und auf den Punkt gebracht:#! /bin/bash if [[ "$(type -P memcached)" ]]; then echo 'memcached installed; checking if it is running' memcached_debug=`mktemp memcache-check.XXXXX` if is-memcached-running localhost 11211 >$memcached_debug 2>&1; then echo 'Yep; memcached online' else cat $memcached_debug echo echo '****** Error: memcached is not running! ******' if [[ "$OSTYPE" =~ ^darwin ]]; then echo echo 'Instructions to auto-spawn on login (or just start now) are shown' echo 'at the end of a "brew install memcached" run (try now, if you did' echo 'not do so already) or, if you did, after a "brew info memcached".' echo fi exit 1 fi rm -f $memcached_debug else echo memcached was not found on your system. if [[ "$OSTYPE" =~ ^darwin ]]; then brew install memcached elif [[ "$OSTYPE" =~ ^linux ]]; then sudo apt-get install memcached else exit 1 fi fi
quelle
Nach dem Beitrag von Aryashree konnte ich einen Fehler erhalten, wenn memcached nicht lokal ausgeführt wurde:
import subprocess port = 11211 res = subprocess.Popen(f"echo stats | nc 127.0.0.1 {port}", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) if res.stdout: lines = res.stdout.read() lineArr = lines.split('\r\n') pidlineArr = lineArr[0].split(' ') pid = pidlineArr[-1] print(f"[MemCached] pid {pid} Running on port {port}") else: raise RuntimeError(f"No Memcached is present on port {port}")
quelle
Ich benutze Mezzanine und die einzige Antwort, die für mich funktioniert hat, war Jacobs Antwort. Stoppen Sie also den Daemon und führen Sie ihn aus
memcached -vv
quelle