2017-02-14 3 views
0

ich eine redis Instanz von Heroku gehostet (https://elements.heroku.com/addons/heroku-redis) und mit dem Plan „Premium 1“Redis hohe Speichernutzung für Almot keine Tasten

Diese redis usued ist nur eine kleine Warteschlange an das Hostsystem namens Bull (https://www.npmjs.com/package/bull)

Die Speicherauslastung liegt jetzt fast bei 100% (von den 100 Mo erlaubt), obwohl in Redis kaum ein Job gespeichert ist.

Ich lief einen INFO Befehl auf dieser Instanz und hier ist der wichtigste Teil (mehr schreiben, wenn erforderlich):

# Server 
redis_version:3.2.4 

# Memory 
used_memory:98123632 
used_memory_human:93.58M 
used_memory_rss:470360064 
used_memory_rss_human:448.57M 
used_memory_peak:105616528 
used_memory_peak_human:100.72M 
total_system_memory:16040415232 
total_system_memory_human:14.94G 
used_memory_lua:280863744 
used_memory_lua_human:267.85M 
maxmemory:104857600 
maxmemory_human:100.00M 
maxmemory_policy:noeviction 
mem_fragmentation_ratio:4.79 
mem_allocator:jemalloc-4.0.3 

# Keyspace 
db0:keys=45,expires=0,avg_ttl=0 

# Replication 
role:master 
connected_slaves:1 
master_repl_offset:25687582196 
repl_backlog_active:1 
repl_backlog_size:1048576 
repl_backlog_first_byte_offset:25686533621 
repl_backlog_histlen:1048576 

Ich habe eine wirklich harte Zeit heraus herauszufinden, wie ich 95 Mo mit kaum verwendet werden kann 50 Objekt gespeichert. Diese Objekte sind sehr klein, in der Regel ein JSON mit 2-3 Felder, die kleine Strings und ids

Ich habe versucht https://github.com/gamenet/redis-memory-analyzer aber es stürzt auf mich, wenn ich versuche, es zu laufen

Ich kann keinen Dump erhalten weil Heroku es nicht erlaubt.

Ich bin ein bisschen verloren hier, es könnte etwas offensichtlich sein, das ich vermisst habe, aber ich bin an der Grenze meines Verständnisses von Redis.

Vielen Dank im Voraus für alle Tipps/Zeiger.

EDIT

Wir hatten unsere Redis zu aktualisierende Instanz alles am Laufen zu halten, aber es scheint, das Problem ist immer noch hier. Derzeit bei 34 Tasten sitzen/34 Mo

Ich habe redis-cli --bigkeys versucht:

Sampled 34 keys in the keyspace! 
Total key length in bytes is 743 (avg len 21.85) 

9 strings with 43 bytes (26.47% of keys, avg size 4.78) 
0 lists with 0 items (00.00% of keys, avg size 0.00) 
0 sets with 0 members (00.00% of keys, avg size 0.00) 
24 hashs with 227 fields (70.59% of keys, avg size 9.46) 
1 zsets with 23 members (02.94% of keys, avg size 23.00) 

Ich bin mir ziemlich sicher, dass es einige Kopf Gebäude irgendwo, aber ich kann nicht das, was finden.

EDIT 2

Ich bin eigentlich blind used_memory_lua_human:267.85M im INFO-Befehl, den ich laufen, wenn der erste Beitrag erstellen und jetzt used_memory_lua_human:89.25M auf die neue Instanz

Dies scheint Super hoch und könnte die erklären Speichernutzung

+0

Ich würde ihre Unterstützung damit in Verbindung setzen - Sie bezahlen sie doch –

Antwort

0

Nach vielen Grabungen kommt das Problem sowieso nicht von Redis oder Heroku.

Das von uns verwendete Warteschlangensystem hat einen kürzlichen Fehler, bei dem Redis ein Lua-Skript speichert, das im Laufe der Zeit immer wieder Speicher auffrischt.

Mehr Infos hier: https://github.com/OptimalBits/bull/issues/426

Dank für diejenigen, die sich die Zeit nahmen, um zu antworten.

0

Sie haben nur 45 Tasten in der Datenbank, was so können Sie tun, ist:

  1. Liste aller Schlüssel mit Befehl
  2. Führen Sie DEBUG OBJECT <key> Befehl für jeden oder mehrere Schlüssel, wird es serialisierte Länge zurückgeben, so dass Sie besser verstehen werden, welche Schlüssel viel Platz verbrauchen.

Alternative Option ist redis-cli --bigkeys zu laufen, so dass es die größten Schlüssel zeigen wird. Sie können den Inhalt des Schlüssels für den Datentyp Befehl sehen - für Strings ist es GET Befehl, für Hashes ist es HGETALL und so weiter.

+0

Leider können Sie nicht 'DEBUG' Befehle auf herokus Redis verwenden. Aber ich werde "- bigkeys" anschauen – Furzel

Verwandte Themen