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 %
페이지 수와 개체 수를 보면 더 높은 슬래브에서 많은 메모리가 낭비되고 있음이 분명합니다. 슬래브 18 또는 19를 고려하면 슬래브 18에는 객체가 26개만 있습니다. 이러한 객체를 수용하기 위해 최대 13페이지가 필요할 수 있다고 가정하면 할당된 총 페이지는 2604입니다.
우리 애플리케이션은 일반적으로 모든 개체에 대해 TTL을 480초 이하로 설정하지만 높은 슬래브의 최대 수명이 너무 높고 밀도가 높은(낮은) 슬래브에서 많은 제거가 발생합니다.
Memcached가 상위 슬래브에서 사용되지 않은 페이지를 회수하지 않고 더 많은 페이지가 필요한 슬래브에 할당하지 않는 이유를 누군가 설명할 수 있습니까?