风暴过程增加记忆

时间:2016-01-13 20:11:36

标签: memory apache-storm

我正在使用Storm实现分布式算法以进行pagerank估计。我一直有内存问题,所以我决定创建一个虚拟实现,它不会在内存中明确保存任何内容,以确定问题是在我的算法还是我的Storm结构中。

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

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

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

螺栓从喷口(fieldsGrouping)以及其他任务中接收数据。

我的消息传递模式基于具有一定停止概率的随机游走。进一步来说: 喷口产生一个元组。 螺栓的一个特定任务接收这个元组。 基于一定的概率,此任务生成另一个元组并再次将其发送到同一螺栓的另一个任务。

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

最诚挚的问候, 尼克

1 个答案:

答案 0 :(得分:2)

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

你可以增加"瓶颈螺栓的平行度"或启用容错机制,该机制还通过有限数量的飞行中元组(https://storm.apache.org/documentation/Guaranteeing-message-processing.html)启用流量控制。为此,您还需要设置" max spout pending"参数。