繁体   English   中英

JVM关闭挂钩异常退出

[英]JVM shutdown hook quits unexpectedly

我正在使用Java代理对Hadoop任务进行JVM性能分析,如https://github.com/etsy/statsd-jvm-profiler中所示 探查器注册关闭钩子,将其保存到HDFS。 但是目前,挂钩在完成之前就已终止。 我确定它们已执行,因为我可以从钩子中看到一些输出。

您是否看到任何IOExceptions或FileSystem关闭错误。 如果是这样,则禁用hdfs shutdown挂钩会有所帮助。

HDFS客户端还注册了关闭挂钩,以便能够正确关闭HDFS连接。 不保证关闭挂钩的调用顺序。 Hdfs挂钩可能先于其他挂钩被调用。 您可以尝试禁用关闭挂钩。 这也意味着您需要在代码中关闭连接。

创建hdfs客户端实例:

Configuration conf = new Configuration();
conf.setBoolean("fs.automatic.close", false);
filesystem = FileSystem.get(nnURI, conf)

在关闭挂钩中:

fileSystem.close();

根据JavaDoc:

关机挂钩也应迅速完成工作。 程序调用exit时,期望虚拟机将立即关闭并退出。 ... 因此,不建议尝试任何用户交互或在关闭挂钩中执行长时间运行的计算

这意味着您只有不到一秒钟的时间来完成任务(确切的价值实际上取决于平台)。 还值得注意的是:

, that is, stop running without shutting down cleanly. 在极少数情况下,虚拟机可能会 ,即在不干净关闭的情况下停止运行。 ...如果虚拟机中止,则无法保证是否将运行任何关闭挂钩

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM