Memcached gibt nicht verwendete Seiten aus einem Slab nicht frei und führt zu Räumungen aus anderen Slabs

Memcached gibt nicht verwendete Seiten aus einem Slab nicht frei und führt zu Räumungen aus anderen Slabs

Wir geraten in eine Situation, in der in bestimmten Slabs Räumungen stattfinden, selbst wenn Memcached genügend Speicher zugewiesen ist, Memcached jedoch ungenutzte Seiten aus anderen Slabs nicht freigibt/neu ausgleicht.

Memcached-Version: 1.4.15

Hier ist die Ausgabe von memcached-tool-ng (Drittanbietertool mit etwas mehr Informationen zu Memstats).

   #  Item_Size    Max_age   Pages     Count   Used Mem     To Store   Efficiency  Evicted  Evict_Time  OOM
  10       6.9K      1583s       1         2    1.00 MB     12.99 KB       1.27 %        0           0   0
  11      11.1K       480s      83      1890   83.00 MB     17.38 MB      20.94 %   282249         480   0
  12      17.8K       479s      57      1156   57.00 MB     19.67 MB      34.51 %  6959481         479   0
  13      28.4K       480s    1052      7277    1.03 GB    136.18 MB      12.94 %   941078         480   0
  14      45.5K        27s     562        17  562.00 MB    536.25 KB       0.09 %   114861          22   0
  15      72.7K        21s     574         2  574.00 MB    125.03 KB       0.02 %     2615          18   0
  16     116.4K     30055s     790       300  790.00 MB     25.96 MB       3.29 %    34786          22   0
  17     186.2K     30230s    1823      1433    1.78 GB    187.89 MB      10.31 %    21823          22   0
  18     297.9K     30201s    2604        26    2.54 GB      4.91 MB       0.19 %     1373          25   0
  19     476.7K     35234s    1322         2    1.29 GB    615.39 KB       0.05 %        0           0   0
  20    1024.0K         0s       2         0    2.00 MB          0 b       0.00 %        0           0   0

Total used memory: 8.66 GB (for 393.24 MB of data)
Global efficiency:  4.43 %

Total used memory: 8.66 GB (for 393.24 MB of data)
Global efficiency:  4.43 %

Betrachtet man die Seitenanzahl und die Objektanzahl, ist es offensichtlich, dass in höheren Segmenten viel Speicher verschwendet wird. Betrachten wir Segment 18 oder 19. In Segment 18 gibt es nur 26 Objekte. Wenn wir davon ausgehen, dass wir maximal 13 Seiten benötigen, um diese Objekte unterzubringen, beträgt die Gesamtzahl der zugewiesenen Seiten 2604.

Unsere Anwendung legt für jedes Objekt normalerweise eine TTL von nicht mehr als 480 Sekunden fest. Das maximale Alter in höheren Platten ist jedoch zu hoch und auch in dichteren (niedrigeren) Platten kommt es häufig zu Räumungen.

Kann jemand erklären, warum Memcached die ungenutzten Seiten nicht von höheren Slabs zurückfordert und sie den Slabs zuweist, in denen mehr Seiten benötigt werden?

verwandte Informationen