我们将apachestorm的localcluster作为java进程运行,即通过nohup运行。
我们正在使用以下配置运行一个简单的拓扑。
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
. 会发生什么问题?
1条答案
按热度按时间vcudknz31#
您可以尝试使用启用调试日志记录
config.setDebug(true);
,这可能让你知道发生了什么。另外,下次拓扑挂起时,您应该能够通过使用
jstack
或者向java进程发送sigquit(kill -3
). 这将导致进程为jvm中的每个线程转储堆栈跟踪,这应该可以让您找出它挂起的原因。作为一种旁白,如果您正在这样做,请不要在生产中使用localcluster。它是用来测试的。