Aktualisiert, siehe unter der längsten (sorry) Frage.
Wenn ich mir unsere gespeicherten Statistiken ansehe, denke ich, dass ich ein Problem gefunden habe, von dem ich vorher nichts wusste. Es scheint, dass wir eine seltsam hohe Menge an verschwendetem Platz haben. Ich habe mich zur Abwechslung bei phpmemcacheadmin erkundigt und festgestellt, dass dieses Bild mich anstarrt:
Jetzt hatte ich den Eindruck, dass im schlimmsten Fall 50% Abfall anfallen, obwohl ich als Erster zugebe, nicht alle Details zu kennen. Ich habe unter anderem diese Seite gelesen, die zwar etwas alt ist, aber auch unsere Version von memcached. Ich glaube, ich verstehe, wie das System funktioniert ( z. B. ), aber es fällt mir schwer, zu verstehen, wie wir 76% verschwendeten Speicherplatz erreichen können.
Die Räumungsrate, die phpmemcacheadmin anzeigt, ist 2 ev/s
, daher gibt es hier ein Problem.
Die primäre Frage ist: Was kann ich dieses Problem beheben tun . Ich könnte mehr Speicher darauf werfen (ich denke, es ist einiges mehr verfügbar), vielleicht sollte ich mit der Plattenkonfiguration experimentieren (ist das mit dieser Version überhaupt möglich?), Vielleicht gibt es noch andere Optionen? Das Aktualisieren der zwischengespeicherten Version ist keine schnell verfügbare Option.
Aus Neugier stellt sich natürlich die Frage, ob und warum eine Verschwendung von 75% (und mehr) Platz zu erwarten ist.
System: Gegen dieses Problem kann ich derzeit nichts unternehmen. Ich weiß, dass die zwischengespeicherte Version nicht die neueste ist, aber das sind die Karten, die mir ausgeteilt wurden.
- Memcached 1.4.5
- Apache 2.2.17
- PHP 5.3.5
Als Antwort auf die Antwort von @DavidSchwartz: Hier sind die Plattenstatistiken, die phpmemcacheadmin erstellt: (es gibt übrigens mehr Platten als diese)
( Ich habe hier auch Statistiken von etwas später im Textformat eingefügt. )
AKTUALISIEREN
Ich habe den Daemon mit -f 1.5 neu gestartet und es sah wirklich gut aus. Nach einigem Aufwärmen hatten wir einen von 50/50 verbraucht / verschwendet. Aber je länger wir an dem Tag waren (es wird tagsüber geschäftiger), umso mehr fiel es auf das zurück, was es aktuell ist: 30/70, und die Verschwendung steigt immer noch. Abgesehen davon weiß ich immer noch nicht, woher die "Verschwendeten" kommen. Ich sehe diese Platte:
**Slab 5 Stats**
Chunk Size 496.0 Bytes
Used Chunk 77502 [24.6 %]
Total Chunk 314986
Total Page 149
Wasted 117.3 MBytes
Hits 30.9 Request/sec
Evicted 0
Es ist nicht voll, es wurde nicht geräumt, aber es verschwendet 117,3 MByte. Die schnelle Berechnung, die ich gemacht habe (korrigiere mich, wenn ich falsch liege), war:
- Die vorherige Platte hat eine Blockgröße von 328, daher ist diese Platte im schlimmsten Fall mit 329-Byte-Blöcken gefüllt.
- Dies bedeutet, dass pro verwendetem Block 167 Byte = 12942834 Byte = 12,3 MB verschwendet werden
Woher kamen dann die anderen verschwendeten 105 MB ? Es ist größerer Bruder direkt daneben sieht so aus:
**Slab 6 Stats**
Chunk Size 744.0 Bytes
Used Chunk 17488 [31.0 %]
Total Chunk 56360
Total Page 40
Wasted 31.1 MBytes
Hits 107.7 Request/sec
Evicted 1109
Antworten:
Seit dieser Frage ist ein Jahr vergangen und ich weiß nicht, ob Sie Ihre Antwort gefunden haben, aber ich werde sagen, dass Ihre Wahrnehmung von "verschwendet" falsch ist.
Der verschwendete Speicher wird im Arbeitsspeicher zugewiesen, sodass er nicht von einer anderen Anwendung verwendet werden kann, er ist jedoch weiterhin für den Speicher verfügbar.
Nehmen Sie zur Vereinfachung der Erklärung an, Sie haben einen Memcache mit 3 MB RAM mit 3 Platten:
Führen Sie einen einzelnen "Satz" mit einer Größe von 10 KB aus. Sie werden in Ihrer Statistik (ungefähr) sehen, dass Sie:
Dies liegt daran, dass memcached einen einzelnen Block aus "Brammenklasse 1" zugewiesen hat und 99% des Speichers für diese Bramme "verschwendet" und 1% "verbraucht" ist. Dies bedeutet nicht, dass die Bramme und der für diese Bramme zugewiesene Speicher verschwunden sind.
Führen Sie einen weiteren einzelnen "Satz" mit einer Größe von 10 KB aus. Diesmal wirst du sehen:
Jetzt verwenden Sie 2 von 100 zugewiesenen Blöcken in Block 1, die "verschwendeten" Statistiken wurden gelöscht und die verwendeten Statistiken wurden erhöht.
Es ist nichts falsch daran, dass used% + wasted% gleich 100% ist. Das bedeutet nicht, dass Sie keinen Speicher mehr haben, sondern nur, dass Sie von jeder Platte mindestens einen Block zugewiesen haben.
Um dieses Problem zu sehen, wählen Sie einen "Satz" mit einer Größe von 100 KB und einen anderen mit einer Größe von 1000 KB
Jetzt wirst du sehen
quelle
Sie haben wahrscheinlich eine sehr große Anzahl sehr kleiner Objekte. In der Regel enthält die kleinste Platte 104-Byte-Einträge. Wenn Sie viele Einträge haben, die nur eine Ganzzahl einer anderen zuordnen, können Sie bis zu 85% Makulatur verursachen.
Informationen dazu finden Sie im Artikel Memcached für kleine Objekte .
quelle
-f 1.5 -I 2800
kann helfen.-I 2800
, das heißt 2800K, im Gegensatz zur 1M-Voreinstellung?Ich hatte dieses Problem und wechselte von memcached zu redis (ohne festplattenbasiertes Speichern). Ich weiß, dass dies möglicherweise nicht möglich ist, aber Sie können es als Option ausprobieren und die Speicherfragmentierung im Auge behalten. Sie können sogar die Persistenz aktivieren, um "alte Cache" -Probleme beim Neustart zu beheben.
quelle