memcached não libera páginas não utilizadas de uma laje e resulta em expulsões de outras lajes

memcached não libera páginas não utilizadas de uma laje e resulta em expulsões de outras lajes

Estamos enfrentando uma situação em que ocorrem remoções em determinados blocos, mesmo que haja memória suficiente alocada para o memcached, mas o memcached não libera/reequilibra páginas não utilizadas de outros blocos.

versão memcached: 1.4.15

Aqui está a saída do memcached-tool-ng (ferramenta de terceiros com um pouco mais de informações sobre 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 %

Observando a contagem de páginas e a contagem de objetos, fica evidente que muita memória está sendo desperdiçada em lajes mais altas. Considere a placa 18 ou 19, na placa 18 existem apenas 26 objetos, assumindo que precisaremos de no máximo 13 páginas para acomodar esses objetos, o total de páginas alocadas é 2.604.

Nosso aplicativo normalmente define o TTL de não mais que 480 segundos em qualquer objeto, no entanto, a idade máxima em lajes mais altas é muito alta, e as lajes mais densas (mais baixas) também estão vendo despejos de lote.

Alguém pode explicar por que o Memcached não está recuperando as páginas não utilizadas das placas mais altas e alocando-as nas placas onde mais páginas são necessárias.

informação relacionada