java - Apache Storm - LocalCluster 停止日志记录,但 java 进程仍在运行

标签 java apache-storm nohup

我们正在将 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/

相关文章:

java - 单击按钮时交换 JavaFX 场景

java - 为什么这段代码不返回字符串?

java - 哪个基于 Java 框架的组件也可以做 Web 服务?

java - Java中的多个同时子字符串替换

logging - 使用 Twitter Storm 处理日志数据?

java - 如何测量 Storm 拓扑中的延迟和吞吐量

Python Storm /web.py : Correctly handling DisconnectionError with MySQL database

bash - 在 nohup 中使用别名

linux - 为什么在第一个脚本之后没有触发第二个 shell 脚本 (nohup)?

linux - 为什么这个脚本不能与 nohup 一起使用但没有?