首页 > 解决方案 > Apache Storm 2.1.0 内存相关配置

问题描述

我们正在从 1.1.x 迁移到 2.1.0。

在我们当前的设置中,storm.yaml 中有以下内存配置

nimbus.childopts: -Xmx2048m
supervisor.childopts: -Xmx2048m
worker.childopts: -Xmx16384m

我在https://github.com/apache/storm/blob/master/conf/defaults.yaml中看到了许多其他与内存相关的配置,并且对它们有以下问题。

  1. worker.childoptstopology.worker.childopts有什么区别?如果我们在storm.yaml 中设置worker.childopts,我们还需要覆盖topology.worker.childopts吗?
  2. 如果我们在storm.yaml中设置worker.childopts,我们还需要覆盖worker.heap.memory.mb吗?这两个配置之间有关系吗?
  3. 应该topology.component.resources.onheap.memory.mb < worker.childopts吗?我们应该如何确定topology.component.resources.onheap.memory.mb的值?

感谢有人能解释这些观点。

标签: apache-stormtopologyapache-storm-topologystorm-topologyapache-storm-configs

解决方案


我最近自己摆弄了其中一些配置,所以我在这里分享我的见解:

  1. worker.childoptsvs topology.worker.childopts- 第一个参数为所有工作人员设置 childopts。第二个参数可用于覆盖各个拓扑的参数,例如通过使用conf.put(Config.TOPOLOGY_WORKER_CHILDOPTS, "someJvmArgsHere");

  2. 的默认值worker.childopts"-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"根据风暴 git。注意第一个参数,它包含一个替换模式%HEAP-MEM%。此模式将替换为您配置的任何内容worker.heap.memory.mb。您可以从 Java 的拓扑配置中覆盖后一个参数,因此我猜他们以这种方式构建它以便能够快速修改各个拓扑的 Java 堆。我注意到的一件事是,在覆盖时,如果至少一个 spout 或 bolt 配置了.setMemoryLoad(int heapSize).

  3. 这在很大程度上取决于各个拓扑的需求,但总的来说,topology.component.resources.onheap.memory.mb比您为 -Xmx in 配置的任何内容都小很可能是一个非常好的主意worker.childopts。如何找到合适的值topology.component.resources.onheap.memory.mb取决于对拓扑组件的内存消耗进行测试和了解。例如,我有一个从 redis 接收元组并发出它们的拓扑。如果 bolts 很忙,元组可能会堆积在 spout 中,因此我在内存方面配置了一些空间。但是,我通常不修改topology.component.resources.onheap.memory.mb而是使用setMemoryLoad(int heapSize)拓扑组件的方法,因为这允许为拓扑的各个组件设置不同的值。此主题和相关主题的 Storm 文档在此处


推荐阅读