【问题标题】:NullPointerException without StackTrace没有 StackTrace 的 NullPointerException
【发布时间】: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


【解决方案1】:

使用-XX:-OmitStackTraceInFastThrow JVM 参数。

【讨论】:

    猜你喜欢
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 2017-07-18
    相关资源
    最近更新 更多