Конфигурации, связанные с памятью Apache Storm 2.1.0
Мы находимся в процессе перехода на 2.1.0 с 1.1.x.
В нашей текущей настройке у нас есть следующие конфигурации памяти в storm.yaml
nimbus.childopts: -Xmx2048m
supervisor.childopts: -Xmx2048m
worker.childopts: -Xmx16384m
Я вижу много других конфигураций, связанных с памятью, в https://github.com/apache/storm/blob/master/conf/defaults.yaml, и у меня есть следующие вопросы по ним.
- в чем разница между worker.childopts и topology.worker.childopts? Если мы устанавливаем worker.childopts в storm.yaml, нужно ли переопределить topology.worker.childopts?
- Если мы устанавливаем worker.childopts в storm.yaml, нужно ли переопределить worker.heap.memory.mb? Есть ли связь между этими двумя конфигами?
- Должен ли topology.component.resources.onheap.memory.mb < worker.childopts? Как нам определить значение topology.component.resources.onheap.memory.mb?
Буду признателен, если кто-нибудь сможет объяснить эти моменты.
1 ответ
Недавно я сам возился с некоторыми из этих конфигураций, поэтому я делюсь своими мыслями здесь:
против
topology.worker.childopts
- первый параметр задает потомки для всех воркеров. Второй параметр можно использовать для переопределения параметров для отдельных топологий, например, с помощьюconf.put(Config.TOPOLOGY_WORKER_CHILDOPTS, "someJvmArgsHere");
Значение по умолчанию для
"-Xmx%HEAP-MEM%m -XX:+PrintGCDetails -Xloggc:artifacts/gc.log -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=artifacts/heapdump"
согласно штормовому мерзавцу . Обратите внимание на первый аргумент, он включает шаблон замены%HEAP-MEM%
. Этот шаблон заменяется тем, что вы настроили дляworker.heap.memory.mb
. Вы можете переопределить последний параметр из конфигурации топологии в Java, поэтому я предполагаю, что они строят его таким образом, чтобы иметь возможность быстро изменять кучу Java для отдельных топологий. Одна вещь, которую я заметил, заключается в том, что при переопределении шторм, кажется, использует значение переопределения только в том случае, если хотя бы один носик или болт настроен с.setMemoryLoad(int heapSize)
.это сильно зависит от индивидуальных потребностей топологии, но в целом, скорее всего, очень хорошая идея иметь меньший размер, чем то, что вы настроили для -Xmx в
worker.childopts
. Как найти хорошее значение зависит от тестирования и знаний о потреблении памяти компонентами вашей топологии. Например, у меня есть топология, которая получает кортежи от Redis и отправляет их. Если болты заняты, кортежи могут накапливаться в носике, поэтому я настраиваю его с некоторым запасом памяти. Однако я обычно не изменяюtopology.component.resources.onheap.memory.mb
а скорее использоватьsetMemoryLoad(int heapSize)
метод компонента топологии, так как это позволяет задавать разные значения для отдельных компонентов топологии. Документы Storm по этой и смежным темам находятся здесь.