我们正在将 Apache Storm 的 LocalCluster 作为 java 进程运行,即通过 nohup。
我们正在使用以下配置运行一个简单的拓扑。
Config config = new Config();
config.setMessageTimeoutSecs(120);
config.setNumWorkers(1);
config.setDebug(false);
config.setMaxSpoutPending(1);
我们正在将拓扑提交到 LocalCluster。我们的关闭钩子(Hook)是跨源发现的默认钩子(Hook)。
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
cluster.killTopology(TOPOLOGY_NAME);
cluster.shutdown();
}
});
最近我们遇到了 Java 堆问题,这些问题本来可以通过增加 Xms、Xmx 和使用 MarkSweepGC 来解决。
但是,我们遇到了新问题。一段时间后,spout 日志不会被写入。不会有任何与 Storm 相关的异常/错误的痕迹。
主要问题是 java 进程,即通过 nohup 仍然出现在 ps -ef
中。会发生什么问题?
最佳答案
您可以尝试使用config.setDebug(true);
启用调试日志记录,这可能会让您知道发生了什么。
此外,下次您的拓扑挂起时,您应该能够通过使用 jstack
或向 Java 进程发送 SIGQUIT (kill -3
) 来判断它在做什么。这将导致进程转储 JVM 中每个线程的堆栈跟踪,这应该可以让您找出它挂起的原因。
顺便说一句,如果您正在这样做,请不要在生产中使用 LocalCluster。它用于测试。
关于java - Apache Storm - LocalCluster 停止日志记录,但 java 进程仍在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53441688/