memcached 不會從某個平板中釋放未使用的頁面,並導致從其他平板中逐出

memcached 不會從某個平板中釋放未使用的頁面,並導致從其他平板中逐出

我們遇到了這樣的情況:即使有足夠的記憶體分配給 memcached,但 memcached 不會從其他平板釋放/重新平衡未使用的頁面,某些平板中也會發生驅逐。

記憶體快取版本:1.4.15

這是 memcached-tool-ng (第三方工具,包含更多關於 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 %

查看頁面計數和物件計數,很明顯,大量記憶體被浪費在較高的平板中。考慮slab 18或19,在slab 18中只有26個對象,假設我們可能需要最多13個頁面來容納這些對象,則分配的總頁面為2604。

我們的應用程式通常將任何物件的 TTL 設定為不超過 480 秒,但是較高板的最大壽命太高,而且較密集(較低)的板也會發生大量驅逐。

有人可以解釋為什麼 Memcached 不從較高的平板中回收未使用的頁面並將其分配給需要更多頁面的平板。

相關內容