监视工作人员在apache风暴中崩溃

时间:2015-04-16 09:08:27

标签: jvm apache-storm

在群集中运行时,如果发生错误,工作人员通常会死亡(JVM关闭)。它可能是由许多因素造成的,大多数时候它是一个挑战(风暴的最大困难?),找出导致崩溃的原因。

当然,风暴管理员会重新启动死亡工人,并且在风暴群集中活跃度非常好,工作人员崩溃仍然是一个混乱我们应该避免,因为它增加了开销,延迟(可能很长时间才发现工人死亡如果你没有设计你的拓扑结构以防止这种情况发生,那么数据就会丢失。

是否有一种简单的方法/工具/方法可以检查风暴工作者崩溃的时间和原因?它们没有在storm-ui中显示(而主管被显示),并且一切都需要手动监控(例如jstack + JVM opts),并且需要非常谨慎。

以下是可能发生的一些情况:

  • 超时和许多可能的原因:java垃圾收集速度慢,网络错误,超时配置错误。我们从管理程序日志本地获得的唯一输出是" state:timeout"或者"陈述:不允许"哪个很差。此外,当一名工人死亡时,关于storm-ui的统计数据将重新启动。当你害怕超时时,你最终会使用长时间的,这对于实时处理来说似乎不是一个好的解决方案。
  • 具有意外行为的高背压,使工作人员心跳加速并导致例如超时。 Acking似乎是处理背压的唯一方法,需要根据您的负载精心制作螺栓。不是acking似乎是不行,因为它确实会使工作人员崩溃并最终得到不好的结果(处理的数据比压力下的acking拓扑更少?)。
  • 代码运行时异常,有时不会在storm-ui中显示,需要手动检查应用程序日志(最简单的情况)。
  • 可以通过JVM转储找到的内存泄漏。

1 个答案:

答案 0 :(得分:1)

风暴管理员通过超时重新启动日志。  你可以监控管理员日志,也可以监控你的bolt(元组)方法的性能。

至于内存泄漏,由于风暴主管确实杀死了-9工作者,堆转储可能会被破坏,所以我会使用工具来动态监视你的堆或杀死主管通过jmap产生堆转储。另外,尝试监控gc日志。

我仍然建议增加默认超时。