1

我想从 SO 社区获得关于这个问题的想法。

这是问题所在:

我们在世界的另一端有一个用户通过 WebStart 启动我们的应用程序。然而,用户抱怨她的整个应用程序冻结并变得无响应。通常,客户端对分布式数据库执行大量数据库查询。

问题:

  1. 如果我们要求她对她的应用程序执行CTRL-Break,JVM 会将堆栈跟踪写入哪里?
  2. 仅使用JConsole就足够了吗?
  3. 在客户端实现JMX bean会不会过大?它真的有助于解决生产中的问题吗?

目前,用户在 JRE 1.5.0-b08 上运行,但我们确实计划在几个月内迁移到 JRE 6。

你怎么看?

4

3 回答 3

2

José,您可以通过多种方式从 JVM 获取大量信息。

最好的办法可能是在远程 JVM 中启用调试。您可以使用描述符 XML 中的元素来设置它们,如此j2se所示。既然你可以设置你有一个好的开始;我从未尝试在 Web 启动应用程序上进行远程调试,因此设置远程部分可能有点问题。-Xdebug

您还可以自己设置一些东西,方法是添加一个单独的线程来远程与您交谈并发送调试消息。

您可以使用本机 javalog4j 远程记录器

但是,如果它按照您描述的方式挂起,那么发生某种网络挂断的可能性非常高。可以在对话结束时进行一些跟踪/调试吗?

于 2009-04-07T18:48:13.233 回答
1

除了这些调试建议,你为什么不为你的线程安装一个异常处理程序呢?请参阅 java.lang.Thread。

void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

这是相关的javadoc:http: //java.sun.com/javase/6/docs/api/java/lang/Thread.html#setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)

如果你将它安装在你的代码中,并且一旦在 Swing 的 EDT 中,那么只需编写一些 java 代码通过电子邮件发送给你自己,将它保存在服务器上,将它展示给用户,等等。

于 2009-04-07T22:02:45.837 回答
0

您需要显示 Java 控制台(从命令行运行 javaws,然后从“首选项”对话框中选择它),然后点击“v”

于 2009-04-07T17:37:00.440 回答