Я отлаживаю скрипт php, который сохраняет данные в memcache
как способ разогреть приложение.
Этот скрипт только делает set
призывает сохранить данные в memcache
, и после установки определенного количества записей первые вставленные элементы начинают исчезать (поведение воспроизводимо).
Я читал документацию по memcache и узнал о выселение Процесс начал проверять журналы и читать статистику, чтобы узнать, причина в этом.
Остановив скрипт php непосредственно перед вставкой элемента, который начинает стирать первые элементы, я запускаю stats slabs
:
stats slabs
STAT 1:chunk_size 96
STAT 1:chunks_per_page 10922
STAT 1:total_pages 1
STAT 1:total_chunks 10922
STAT 1:used_chunks 1
STAT 1:free_chunks 10921
STAT 1:free_chunks_end 0
STAT 1:mem_requested 93
STAT 1:get_hits 0
STAT 1:cmd_set 1
STAT 1:delete_hits 0
STAT 1:incr_hits 0
STAT 1:decr_hits 0
STAT 1:cas_hits 0
STAT 1:cas_badval 0
STAT 1:touch_hits 0
STAT 3:chunk_size 152
STAT 3:chunks_per_page 6898
STAT 3:total_pages 4
STAT 3:total_chunks 27592
STAT 3:used_chunks 22787
STAT 3:free_chunks 4805
STAT 3:free_chunks_end 0
STAT 3:mem_requested 3232040
STAT 3:get_hits 0
STAT 3:cmd_set 22814
STAT 3:delete_hits 0
STAT 3:incr_hits 0
STAT 3:decr_hits 0
STAT 3:cas_hits 0
STAT 3:cas_badval 0
STAT 3:touch_hits 0
STAT 4:chunk_size 192
STAT 4:chunks_per_page 5461
STAT 4:total_pages 1
STAT 4:total_chunks 5461
STAT 4:used_chunks 1300
STAT 4:free_chunks 4161
STAT 4:free_chunks_end 0
STAT 4:mem_requested 202877
STAT 4:get_hits 0
STAT 4:cmd_set 1301
STAT 4:delete_hits 0
STAT 4:incr_hits 0
STAT 4:decr_hits 0
STAT 4:cas_hits 0
STAT 4:cas_badval 0
STAT 4:touch_hits 0
STAT active_slabs 3
STAT total_malloced 6291008
Как видите, на всех плитах осталось свободное место.
Когда сценарий вставляет следующий элемент, сервер memcache регистрирует это:
30: going from conn_closing to conn_closed
29: going from conn_read to conn_parse_cmd
<29 set [tc:e-401:id-2485:profile-5:property-11][1] 0 0 3
29: going from conn_parse_cmd to conn_nread
> NOT FOUND [tc:e-401:id-2485:profile-5:property-11][1]
>29 STORED
Снова звоню stats slabs
Вижу, что использовалась новая плита:
stats slabs
STAT 1:chunk_size 96
STAT 1:chunks_per_page 10922
STAT 1:total_pages 1
STAT 1:total_chunks 10922
STAT 1:used_chunks 1
STAT 1:free_chunks 10921
STAT 1:free_chunks_end 0
STAT 1:mem_requested 93
STAT 1:get_hits 0
STAT 1:cmd_set 1
STAT 1:delete_hits 0
STAT 1:incr_hits 0
STAT 1:decr_hits 0
STAT 1:cas_hits 0
STAT 1:cas_badval 0
STAT 1:touch_hits 0
STAT 2:chunk_size 120
STAT 2:chunks_per_page 8738
STAT 2:total_pages 1
STAT 2:total_chunks 8738
STAT 2:used_chunks 1
STAT 2:free_chunks 8737
STAT 2:free_chunks_end 0
STAT 2:mem_requested 120
STAT 2:get_hits 0
STAT 2:cmd_set 1
STAT 2:delete_hits 0
STAT 2:incr_hits 0
STAT 2:decr_hits 0
STAT 2:cas_hits 0
STAT 2:cas_badval 0
STAT 2:touch_hits 0
STAT 3:chunk_size 152
STAT 3:chunks_per_page 6898
STAT 3:total_pages 4
STAT 3:total_chunks 27592
STAT 3:used_chunks 22790
STAT 3:free_chunks 4802
STAT 3:free_chunks_end 0
STAT 3:mem_requested 3232437
STAT 3:get_hits 0
STAT 3:cmd_set 22817
STAT 3:delete_hits 0
STAT 3:incr_hits 0
STAT 3:decr_hits 0
STAT 3:cas_hits 0
STAT 3:cas_badval 0
STAT 3:touch_hits 0
STAT 4:chunk_size 192
STAT 4:chunks_per_page 5461
STAT 4:total_pages 1
STAT 4:total_chunks 5461
STAT 4:used_chunks 1300
STAT 4:free_chunks 4161
STAT 4:free_chunks_end 0
STAT 4:mem_requested 202877
STAT 4:get_hits 0
STAT 4:cmd_set 1301
STAT 4:delete_hits 0
STAT 4:incr_hits 0
STAT 4:decr_hits 0
STAT 4:cas_hits 0
STAT 4:cas_badval 0
STAT 4:touch_hits 0
STAT active_slabs 4
STAT total_malloced 7339568
END
Первый элемент (ключ начинается с "tc:e-501
"больше нет (проверено с помощью memdump --servers=localhost | grep tc:e-501
и позвонив get
из php для получения первого ключа тоже дает мне несуществующий)
Вызов stats items
Я вижу, что счетчик выселений 0 ...
stats items
STAT items:1:number 1
STAT items:1:age 1391
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:1:reclaimed 0
STAT items:1:expired_unfetched 0
STAT items:1:evicted_unfetched 0
STAT items:1:crawler_reclaimed 0
STAT items:2:number 1
STAT items:2:age 982
STAT items:2:evicted 0
STAT items:2:evicted_nonzero 0
STAT items:2:evicted_time 0
STAT items:2:outofmemory 0
STAT items:2:tailrepairs 0
STAT items:2:reclaimed 0
STAT items:2:expired_unfetched 0
STAT items:2:evicted_unfetched 0
STAT items:2:crawler_reclaimed 0
STAT items:3:number 22790
STAT items:3:age 1391
STAT items:3:evicted 0
STAT items:3:evicted_nonzero 0
STAT items:3:evicted_time 0
STAT items:3:outofmemory 0
STAT items:3:tailrepairs 0
STAT items:3:reclaimed 0
STAT items:3:expired_unfetched 0
STAT items:3:evicted_unfetched 0
STAT items:3:crawler_reclaimed 0
STAT items:4:number 1300
STAT items:4:age 1381
STAT items:4:evicted 0
STAT items:4:evicted_nonzero 0
STAT items:4:evicted_time 0
STAT items:4:outofmemory 0
STAT items:4:tailrepairs 0
STAT items:4:reclaimed 0
STAT items:4:expired_unfetched 0
STAT items:4:evicted_unfetched 0
STAT items:4:crawler_reclaimed 0
END
После звонков в set
из сценария продолжайте удалять первые элементы, вставленные последовательно, поэтому я отбрасываю столкновение клавиш.
Что может быть причиной такого поведения? В настоящее время я совершенно ничего не понимаю.
Отредактировано: Использование memcached 1.4.20 Отредактировано: Использование опции -M
похоже, не помогает, элементы все равно удаляются и нет set
позвонить вернуть любой false
стоимость.