风暴进程增加内存



我正在使用Storm实现一种用于页面排名估计的分布式算法。我一直遇到内存问题,所以我决定创建一个不显式保存在内存中的任何内容的虚拟实现,以确定问题出在我的算法还是我的 Storm 结构上。

事实上,虽然虚拟实现所做的唯一事情是消息传递(很多),但每个工作进程的内存不断上升,直到管道堵塞。我不明白为什么会发生这种情况。

我的集群有 18 台机器(有些有 8g,有些是 16g,有些是 32g 内存)。我已将工作线程堆大小设置为 6g (-Xmx6g)。

我的拓扑非常简单:一个喷口一个螺栓(平行)。

螺栓从喷口(字段分组)以及自身的其他任务接收数据。

我的消息传递模式基于具有一定停止概率的随机游走。更具体地说:壶嘴生成一个元组。来自 bolt 的一个特定任务接收此元组。基于一定的概率,此任务生成另一个元组,并将其再次发射到同一螺栓的另一个任务。

我在这个问题上停留了很长一段时间,所以如果有人能提供帮助,那将非常有帮助。

此致敬意缺口

您的拓扑似乎存在瓶颈,即螺栓接收器比 in 可以处理的数据更多。因此,bolt 的输入队列会随着时间的推移而增长,消耗越来越多的内存。

您可以增加"瓶颈螺栓"的并行度,也可以启用容错机制,该机制还可以通过有限数量的飞行中元组 (https://storm.apache.org/documentation/Guaranteeing-message-processing.html) 实现流量控制。为此,您还需要设置"最大喷口待处理"参数。

最新更新