Size: a a a

2021 February 09

DL

Dmitry Lukovkin in Tarantool
Подскажите, как можно бороться с фрагментацией? Добавить памяти особо не выйдет - впс с 2Гб.(Под ТТ 1Гб, но там есть еще софт) Рестарт помогает, но на время. ТТ 1.10.9
источник

MA

Mons Anderson in Tarantool
Dmitry Lukovkin
Подскажите, как можно бороться с фрагментацией? Добавить памяти особо не выйдет - впс с 2Гб.(Под ТТ 1Гб, но там есть еще софт) Рестарт помогает, но на время. ТТ 1.10.9
Может помочь тюнить slab_alloc_factor
источник

DL

Dmitry Lukovkin in Tarantool
Mons Anderson
Может помочь тюнить slab_alloc_factor
источник

MA

Mons Anderson in Tarantool
Игнорируйте это :)
источник

MA

Mons Anderson in Tarantool
У меня есть сниппет кода для печати содержимого слабов
local function MAP(t) return setmetatable(t,require'json'.map_mt) end local t = require'fun'.iter(box.slab.stats()):map(function(s) return MAP{kind=s.item_size, cnt=s.slab_count, items=s.item_count, use=math.floor(s.mem_used/(s.slab_size * s.slab_count)*1000)/10, size=s.slab_size} end):totable() table.sort(t,function(a,b) return a.kind < b.kind end) return t

Если дадите выхлоп, можно попробовать посмотреть какие настройки фактора выставить
источник

DL

Dmitry Lukovkin in Tarantool
Mons Anderson
У меня есть сниппет кода для печати содержимого слабов
local function MAP(t) return setmetatable(t,require'json'.map_mt) end local t = require'fun'.iter(box.slab.stats()):map(function(s) return MAP{kind=s.item_size, cnt=s.slab_count, items=s.item_count, use=math.floor(s.mem_used/(s.slab_size * s.slab_count)*1000)/10, size=s.slab_size} end):totable() table.sort(t,function(a,b) return a.kind < b.kind end) return t

Если дадите выхлоп, можно попробовать посмотреть какие настройки фактора выставить
куда это приложить? ))
источник

MA

Mons Anderson in Tarantool
в консоли выполнить
источник

MA

Mons Anderson in Tarantool
это переформатирование box.slab.stats()
источник

DL

Dmitry Lukovkin in Tarantool
Mons Anderson
У меня есть сниппет кода для печати содержимого слабов
local function MAP(t) return setmetatable(t,require'json'.map_mt) end local t = require'fun'.iter(box.slab.stats()):map(function(s) return MAP{kind=s.item_size, cnt=s.slab_count, items=s.item_count, use=math.floor(s.mem_used/(s.slab_size * s.slab_count)*1000)/10, size=s.slab_size} end):totable() table.sort(t,function(a,b) return a.kind < b.kind end) return t

Если дадите выхлоп, можно попробовать посмотреть какие настройки фактора выставить
много строк.
источник

MA

Mons Anderson in Tarantool
давайте )
источник

DL

Dmitry Lukovkin in Tarantool
Mons Anderson
давайте )
Сразу не догадался)))
источник

EM

Eugene Manaev in Tarantool
Добрый день! А есть поддержка protobuf у Tarantool?
источник

MA

Mons Anderson in Tarantool
Dmitry Lukovkin
Сразу не догадался)))
Ох, как грустненько...

Давайте я опишу как это внутри, а вы попробуете подобрать коэффициенты.

Чтобы сохранить элемент размера X ищется подходящий слаб, назрачение размера которого будет > X

Начинаем со slab_alloc_minimal (он-же memtx_min_tuple_size), по умолчанию равняется 32.
Далее добавляем по 8 байт максимум 31 раз.
(Т.е. в диапазоне 32..280 байт слабы выделяются с шагом 8 байт)
Если X > 280, то алгоритм продолжается: мы берём последний максимальный размер и умножаем его на slab_alloc_factor (по умолчанию 1.05) до тех пор, пока данные не впишутся (ну и ещё там есть выравнивание). пример продолжения: 280*1.05=294, 294*1.05=308, ...

Что можно тюнить:
1. Можно поменять фактор. Например поставить 2. Это сильно уменьшит количество различных классов и повысит переиспользование выделенных слабов.
2. Можно поднять memtx_min_tuple_size. Это поднимет стартовую точку отсчёта.

Для ваших данных я вижу следующую картину:

У вас немного данных, которые меньше 1 kb. Можно сделать memtx_min_tuple_size=776 (1024-31*8)
Это сделает линейку стартовых слабов, в которые будут раскладываться все таплы < 1kb.
Далее у вас идёт очень сильный разрыв между данными. Поэтому я бы взял крупный фактор (1.5 - 2)


Итого: попробуйте добавить своему инстансу
memtx_min_tuple_size=776,
slab_alloc_factor=2,
источник

Bp

Bar pri in Tarantool
Artem Morozov
а зачем sh -c? запусти без него, пожалуйста
падал на импортирование GPG ключей. Спулил свежий образ centos:8 и стало все отлично. Руками пробовал на образе centos:centos8. Работает
источник

AM

Artem Morozov in Tarantool
Bar pri
падал на импортирование GPG ключей. Спулил свежий образ centos:8 и стало все отлично. Руками пробовал на образе centos:centos8. Работает
здорово, что получилось)
источник

DL

Dmitry Lukovkin in Tarantool
Mons Anderson
Ох, как грустненько...

Давайте я опишу как это внутри, а вы попробуете подобрать коэффициенты.

Чтобы сохранить элемент размера X ищется подходящий слаб, назрачение размера которого будет > X

Начинаем со slab_alloc_minimal (он-же memtx_min_tuple_size), по умолчанию равняется 32.
Далее добавляем по 8 байт максимум 31 раз.
(Т.е. в диапазоне 32..280 байт слабы выделяются с шагом 8 байт)
Если X > 280, то алгоритм продолжается: мы берём последний максимальный размер и умножаем его на slab_alloc_factor (по умолчанию 1.05) до тех пор, пока данные не впишутся (ну и ещё там есть выравнивание). пример продолжения: 280*1.05=294, 294*1.05=308, ...

Что можно тюнить:
1. Можно поменять фактор. Например поставить 2. Это сильно уменьшит количество различных классов и повысит переиспользование выделенных слабов.
2. Можно поднять memtx_min_tuple_size. Это поднимет стартовую точку отсчёта.

Для ваших данных я вижу следующую картину:

У вас немного данных, которые меньше 1 kb. Можно сделать memtx_min_tuple_size=776 (1024-31*8)
Это сделает линейку стартовых слабов, в которые будут раскладываться все таплы < 1kb.
Далее у вас идёт очень сильный разрыв между данными. Поэтому я бы взял крупный фактор (1.5 - 2)


Итого: попробуйте добавить своему инстансу
memtx_min_tuple_size=776,
slab_alloc_factor=2,
Спасибо! У нас могут изредка прилететь и толстые записи! Это не повлияет на них?
источник

MA

Mons Anderson in Tarantool
Dmitry Lukovkin
Спасибо! У нас могут изредка прилететь и толстые записи! Это не повлияет на них?
Это моможет им укладываться в одни и те же слабы.
Сейчас у вас очень много выделенных слабов, которые не используются
источник

DL

Dmitry Lukovkin in Tarantool
Mons Anderson
Это моможет им укладываться в одни и те же слабы.
Сейчас у вас очень много выделенных слабов, которые не используются
Понял. Попробуем. Спасибо! Через box.cfg как я понял их не скормить? Через рестарт?
источник

MA

Mons Anderson in Tarantool
Dmitry Lukovkin
Понял. Попробуем. Спасибо! Через box.cfg как я понял их не скормить? Через рестарт?
Да, эти настройки влияют на поведение аллокатора, поэтому только через рестарт
источник

AK

Alexey Kuzin in Tarantool
Eugene Manaev
Добрый день! А есть поддержка protobuf у Tarantool?
Те, кто пользовались протобафом, делали прокси через гошку
источник