Как мне ограничить использование памяти rocksdb в kafka-streams

#docker #apache-kafka-streams #rocksdb

#docker #apache-kafka-streams #rocksdb

Вопрос:

Я использую kafka-streams, и использование памяти вне кучи увеличивается до физических пределов компьютера. Однако при запуске kafka-streams в docker использование памяти превышает пределы контейнера, поэтому контейнер отключается от ООМ.

Я предполагаю, что rocksdb выделяет пространство вне кучи. -Xmx можно использовать для ограничения использования кучи, но я не могу найти ничего подобного для использования rockdb вне кучи.

Как rocksdb определяет ограничение физической памяти и есть ли способ имитировать это ограничение в контейнере?

Комментарии:

1. Вам необходимо соответствующим образом настроить RocksDB через RocksDBConfigSetter .

Ответ №1:

Это проблема фрагментации памяти.

Вы можете либо настроить распределитель памяти glibc, установив переменную среды MALLOC_ARENA_MAX=2 , либо изменить распределитель памяти с glibc на jemalloc.

Комментарии:

1. Можно ли изменить распределитель памяти без изменения кода kafka-streams?

2. Обязательно скачайте [ github.com/jemalloc/jemalloc/releases ] и выполнить сборку из исходного кода или использовать менеджер пакетов. Для сборки: ` ./configure —enable-prof make sudo make install ` И установите переменную окружения: LD_PRELOAD=/usr/local/lib / libjemalloc.таким образом, переменная LD_PRELOAD позволяет переопределять стандартные функции библиотеки C.