我们正在通过Java进程(即通过nohup)运行Apache Storm的LocalCluster。
我们正在运行具有以下配置的简单拓扑。
Config config = new Config();
config.setMessageTimeoutSecs(120);
config.setNumWorkers(1);
config.setDebug(false);
config.setMaxSpoutPending(1);
我们正在将拓扑提交给LocalCluster。我们的关闭钩子是跨源发现的默认钩子。
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
cluster.killTopology(TOPOLOGY_NAME);
cluster.shutdown();
}
});
最近我们遇到了Java堆问题,可以通过增加Xms,Xmx并使用MarkSweepGC来解决。
但是,我们遇到了新问题。一段时间后未写入喷口日志。不会有任何与风暴相关的异常/错误的痕迹。
主要问题是Java进程,即通过nohup仍显示在ps -ef
中。会发生什么问题?
答案 0 :(得分:0)
您可以尝试使用config.setDebug(true);
启用调试日志记录,这可能使您知道正在发生什么。
下次拓扑挂起时,您也应该能够通过使用jstack
或向Java进程发送SIGQUIT(kill -3
)来告诉它正在做什么。这将导致该进程为JVM中的每个线程转储堆栈跟踪,这应该让您找出其挂起的原因。
顺便提一下,请不要在生产中使用LocalCluster。用于测试。