#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.