У нас есть несколько ящиков, на которых работает memcached. Некоторые из них 32-битные, а некоторые 64-битные, но все запускают 32-битную установку RHEL из-за различных вещей, связанных с Perl. Мы назовем их типами A и B соответственно. Оба типа запускают memcached 1.2.8 с одинаковым объемом памяти, выделенной через -m
переключатель. Каждый экземпляр memcached содержит одни и те же данные - в этой установке мы используем их не как распределенный хэш, а как локальное хранилище на каждой машине. Отдельный процесс отвечает за заполнение каждого экземпляра свежими данными через равные промежутки времени.
Сегодня мы заметили, что все 64-битные машины начали вытеснять элементы:
Тип A, 32-битный
STAT curr_items 115208
STAT evictions 0
STAT limit_maxbytes 67108864
Тип B, 64-бит
STAT curr_items 122192
STAT evictions 1049488
STAT limit_maxbytes 67108864
Первоначально я думал, что машины типа B используют больше оперативной памяти, но я неправильно понял rusage
статистика (см. историю редактирования). Есть идеи, почему машины типа B начнут выселять раньше других, даже с теми же данными, посеянными одновременно с машинами типа A? Это связано с тем, что базовое оборудование является 64-битным? Здесь я демонстрирую позорное незнание компьютерного оборудования, но есть только один способ исправить это.
Если оба типа A и B работают в 32-битной ОС, не должно быть разницы в размерах объектов для пользовательских приложений, таких как memcached. Если PAE включен / отключен, для ядра можно увидеть различия, но даже это не должно влиять на использование памяти в пользовательском пространстве.
Не могли бы вы опубликовать полный вывод stats
, stats sizes
, stats items
для обоих типов? (Два последних могут занять много времени для большой памяти, но при 67 МБ это не ваш случай).
И, конечно же, первоначальный выход memcached -vv
.