在Windows上监控(java)进程死亡的最好方法是什么?

我们有一个好奇的问题,我们的Java进程死亡。

应用程序不会堆栈跟踪或向日志写入任何内容,该进程只是随机死亡。 这是一个大量使用的应用程序,但问题只出现一个月一次。

我们目前正在考虑使用Process Monitor,但欢迎任何其他build议。

编辑:

这是一个分布式的Java应用程序,运行在Weblogic内部的Web框架(是的,这是一个可怕的想法,但已经运行了八年),连接到Oracle。

内存不足? 根据Brian Agnew的说法,我们的日志会捕获java.lang.OutOfMemoryException。

写崩溃的日志? 我不认为Java有机会,死亡发生在stream程层面,而不是Java退出。

你可以把它包装在一些捕获日志文件(stdout / stderr)和退出代码(它应该给出一些指示它是如何死亡)的shell脚本? 在JVM退出时,您还可以使用WMI捕获计算机级别的统计信息

如果虚拟机本身崩溃,则会留下包含堆栈跟踪,机器级调试信息的hs_err_pid …文件。 然后,您可以使用它来诊断VM问题。 请参阅此博客条目以获取更多信息。

如果问题与应用程序的行为有关,则可能需要查看JConsole ,尽管从描述问题来看,这听起来更像是一个低级别的VM问题。

(我假设你在Java版本号的最新VM上)

您可以使用Linux NAGIOS服务器来监视Windows机器和服务的健康状况! 看看: nagios-monitoring-windows 。

如果你的Java应用程序有这样的问题! 你应该测试它并进行调试! 应用程序不应该死亡,没有痕迹! 寻找日志文件! 从哪个供应商是应用程序? 或者是自己写的? 尝试执行另一个Log4J /记录器/调试级别。 用仙人掌等监视你的系统,以减少这种崩溃的可能性。 与软件供应商交谈。

是否有可用的内存? 也许应用程序内存不足? 它是独立的java进程还是来自tomcat / jboss服务器的java进程?

你有没有把崩溃时间记录下来? 出现在不同的时间片? 或者看起来他们几乎是时间循环?

VisualVM是一个新的工具,可以使监控Java应用程序变得更容易:

https://visualvm.dev.java.net/description.html

“VisualVM是一个在运行Java应用程序时提供详细信息的工具,它提供了一个直观的图形用户界面,使您能够轻松查看有关多个Java应用程序的信息。