Hi, Normally, multi-lang heartbeat is done with below way.
- ShellBolt sends heartbeat tuple periodically - Subprocess reads tuple from queue and responses it to heartbeat message - ShellBolt periodically checks the time of last heartbeat message and suicide if it's too old It has a serious downside: when there're so many tuples flowing through the subprocess so that subprocess is alive but can't read heartbeat tuple in time. STORM-742 <http://issues.apache.org/jira/browse/STORM-742> addressed this, and that patch became part of Storm 0.10.0. You may want to give it a try with Storm 0.10.0. Thanks, Jungtaek Lim (HeartSaVioR) 2016년 3월 16일 (수) 오후 5:04, gzc <[email protected]>님이 작성: > Hi, guys > > My ShellBolt died. > > 2016-03-15T14:02:03.028+0800 b.s.t.ShellBolt [ERROR] Halting process: > ShellBolt died. > java.lang.RuntimeException: subprocess heartbeat timeout > at > backtype.storm.task.ShellBolt$BoltHeartbeatTimerTask.run(ShellBolt.java:305) > [storm-core-0.9.6.jar:0.9.6] > at > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) > [na:1.8.0_31] > at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) > [na:1.8.0_31] > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) > [na:1.8.0_31] > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) > [na:1.8.0_31] > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > [na:1.8.0_31] > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > [na:1.8.0_31] > at java.lang.Thread.run(Thread.java:745) [na:1.8.0_31] > > Why did it happen? CPU too busy? I cannot find any more clue. > > -- > gzc > > > > > >
