Aleksey
господа кто нить nats-streaming юзает ?
Aleksey
как впечателения если да ?
Ivan
Так, господа умные. Помогите мне с редисом. Утекает память( Куда копать?
Ivan
Ivan
нашел вот такое:
You can set the maxmemory configuration variable in your redis conf and then set the maxmemory-policy to either allkeys-lru or allkeys->random which will allow keys to be removed from the database and make redis act like a cache. Since you're using it as a cache you can comment out all save lines so redis won't save to disk.
This is probably the easiest way and you won't have to switch to memcached, I suggest the allkeys-lru which will allow any key to be removed with the ones that are least recently used being removed first.
G72K
Помню от фрагментации текла сильно
Alexander 🐕
> Утекает память(
В сисьтеме со slab allocator?
А ты эвиктишь, вообще?
Alexander 🐕
Alexander 🐕
То есть - она есть, но предсказуемая
G72K
А чем slab такой магический? Он двигает объекты чтоли?
Alexander 🐕
պլհկ
Зачем двигать? Удалил - положил на то же место новый
Alexander 🐕
А дальше круглые чушки запихиваются в квадратные отверстия
Alexander 🐕
Если для мелких чушек все отверстия заняты, то большое пилится на кусочки, и по новой
Ivan
G72K
Ну и что. Понасоздавали кучу, поудаляли случайно. В итоге в keys * ничего нет почти,,а памяти сотни мегабайт ушло, просто потому что по обьекту в каждой аллокации осталось
Alexander 🐕
Alexander 🐕
Alexander 🐕
Alexander 🐕
Из коробки он работает как сторадж бесконечного размера
Alexander 🐕
И ничего не эвиктит
Ivan
Да я уже понял
Ivan
Если я ему задам в конфиге maxmemory - он дальше сам разберется?
G72K
Ит дазнт ворк дат вей
уверен, что можно наспор сожрать гигабайты при этом чтобы в keys были сотни объектов только
Ivan
что указывать и в каком виде?
Ivan
ты же про Eviction policies?
Alexander 🐕
Alexander 🐕
Alexander 🐕
А вот кэппинг по памяти сверху + разрешение эвиктить - заабузить сильно сложнее
G72K
Nyet
Почему нет то? Достаточно оставить по одному обьекту на каждый сделаный malloc . Создать миллионы и стратегически удалить миллионы минус сотенка
Alexander 🐕
Alexander 🐕
Alexander 🐕
А дальше есть просто бакеты нужного размера
Alexander 🐕
Как водится, степени двойки
Alexander 🐕
(Не знаю, почему именно двойки)
aborche
Что-то я в грусти. А есть на свете лог коллекторы не написанные на ruby и java?
Ivan
This is a good pick if you are unsure
Ivan
ладно убедил)
Alexander 🐕
Alexander 🐕
С другой стороны - а чего бы и не на джава?
Ivan
А теперь вопрос: у меня редис в контейнере. Если я туда подсуну конфиг, в котором укажу только maxmemorylimit и allkeys-lru - оно нормально подсосется? Или все описывать?
aborche
Ну не linuxом единым как бы
G72K
И что, ему ж надо будет разместить весь тот понос, который я в него вначале залью. Все эта хрень сделает все страницы dirty, потом я все удалю, но не все, а оставлю по одному в каждом malloc, так что алокатор не сможет сделать free и вуаля.
պլհկ
Alexander 🐕
Navern
Navern
Но никто пока не тестил в проде, наскок знаю)
G72K
Ivan
Короче, господин Чистяков
Ivan
Ivan
Выставил maxmemory-policy allkeys-lru
Ivan
и оно совсем перестало есть память
Ivan
раньше хотя б 400мб жрало
Ivan
а теперь 3
Ivan
оО?
Ivan
@demeliorator чтояблятьсделал?
Bogdan (SirEdvin)
Вы же не храните в редисе важную инфу?
Ivan
Alexander 🐕
Ivan
Ivan
Alexander 🐕
Число ключей похоже на правду?
Ivan
Pavel
Судя по графеку у тебя нетути времени жизни ключей
Pavel
Или прост ты набивал базу, а старые ещо не протухали)
Pavel
Щотам с ttl?
Pavel
И вообщэ, хде редис мастер-мастер?!
Pavel
Я его дико желаю
Anonymous
https://cli.fyi/#available-commands Ухты юниксвэй в формате микросервисов :)
G72K
Да потому что нет там никакого malloc
Либо malloc либо sbrk всегда есть. Вобщем, давайте поспорим на что-нибудь, что я напишу скрипт, который mem_fragmentation_ratio в стате redis сделает >10