Nos encontramos con una situación en la que se producen desalojos en ciertas losas, incluso si hay suficiente memoria asignada a Memcached, pero Memcached no libera ni reequilibra las páginas no utilizadas de otras losas.
versión memcached: 1.4.15
Aquí está el resultado de memcached-tool-ng (herramienta de terceros con un poco más de información 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 %
Al observar el recuento de páginas y el recuento de objetos, es evidente que se desperdicia mucha memoria en losas superiores. Considere la losa 18 o 19, en la losa 18 solo hay 26 objetos, suponiendo que necesitemos un máximo de 13 páginas para acomodar estos objetos, el total de páginas asignadas es 2604.
Nuestra aplicación generalmente establece un TTL de no más de 480 segundos en cualquier objeto; sin embargo, la edad máxima en las losas superiores es demasiado alta y las losas más densas (inferiores) también están experimentando desalojos de lotes.
¿Alguien puede explicar por qué Memcached no recupera las páginas no utilizadas de losas superiores y las asigna a las losas donde se requieren más páginas?