【发布时间】:2016-01-26 22:46:24
【问题描述】:
让我试着解释一下..我们有一个运行 Jboss 5.1 的服务器,有很多并发连接,有时我们需要重新启动并进行一些维护/发布。
问题是,有时我们启动服务器时,看起来某些库在启动时没有加载,或者由于其他原因,我们不断收到NullPointerException 没有任何堆栈跟踪.. 我们确实知道这个类它被抛出,但通过检查代码,可能由于某种原因抛出空指针,甚至强制一些异常,它们都至少有堆栈跟踪。
我在 stackoverflow 中找到了许多关于 JVM 进行一些优化的答案,但我们刚刚启动了服务器。即使第一个 exception 被抛出,我也不相信它会进行任何优化。我也有检查任何相关的setStackTrace 或类似ex.toString()..的代码,我们也没有。
所以我的问题实际上是,除了这个优化之外,还有什么原因可以在没有堆栈跟踪的情况下抛出这样的exception?
编辑:
我的问题与-XX:-OmitStackTraceInFastThrow 无关,因为即使在第一个异常情况下也会发生!
【问题讨论】:
-
如果你没有得到堆栈跟踪,你怎么知道你遇到了
NPE?也许它在任何地方被捕获或手动抛出? -
更正:没有堆栈跟踪不会引发异常。它在没有堆栈跟踪的情况下被记录。如中所示,仅记录消息 (logger.error(e))。这只是错误的日志记录逻辑,它可以存在于任何地方,包括构成 JBoss 5.1 实例的数千个类中。
-
我猜你可以用 try catch 语句包围你的所有代码,当它们捕捉到异常时,ex.printStackTrace()
-
我感受到了您的痛苦,但现在想知道那些无法访问您的服务器环境的人可以做什么。
-
尝试使用JVMTI agent 来跟踪所有异常,即使它们被静默捕获。请参阅related question。
标签: java optimization nullpointerexception jvm