【问题标题】:How does Storm handle with Garbage Collection?Storm 如何处理垃圾收集?
【发布时间】:2015-08-02 04:35:20
【问题描述】:

Storm 是如何处理垃圾回收的? 性能如此之快的原因是什么。是因为 Disruptor-Pattern 还是我缺少其他东西。

【问题讨论】:

  • 这个问题太宽泛了,恕我直言。关于 GC 的一条评论:在 Storm 中并没有什么特别之处。
  • 以什么指标衡量的快速性能?与什么相比更快?你应该问一个更详细的问题。
  • 正如@MatthiasJ.Sax 所说,storm 就像任何其他 jvm 应用程序一样。

标签: java clojure garbage-collection real-time apache-storm


【解决方案1】:

一个执行器是一个 JVM 线程。

要获得垃圾收集的可见性,您需要在storm.yaml 中配置worker.childopts 属性。

worker.childopts: "-XX:+PrintCGTimeStamps
-XX:+PrintGCTimeStamps
-Xloggc: /opt/storm/logs/worker%ID%-jvm-gc.log
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=5
-XX:GCLogFileSize=1M
-XX:+PrintGCDateStamps
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCApplicationConcurrentTime"

现在您可以检查垃圾收集器的输出了

【讨论】:

  • 谢谢你的回答,我只是想知道 LMAX Disruptor 的作用,因为它用于 Storm 中的线程间通信,并且所有用于 ring-buffer 的内存都是在启动时预先分配的,以及这种预分配如何影响 GC
  • LMAX Distruptor 是一个线程间消息传递库。它用于处理执行程序之间的消息传输的队列。每个队列都有 2 个角色,传出中断元组用于执行器向队列发出元组,传入中断器队列用于执行器从队列中读取。
  • 嗨,我将它添加到我的 Yaml 中,以及在我的拓扑配置中设置字符串的代码conf.put(Config.WORKER_CHILDOPTS, config.getWorkerChildopts()); 但我找不到 GC 日志。我将 -loggc 参数更改为我看到 worker/supervisor/etc... 日志的同一目录,但没有 GC 日志。有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 2011-07-03
  • 2011-03-29
  • 1970-01-01
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多