1

我的一个应用程序在运行 Java 1.6 的 Tomcat 5.5 的 Windows 服务实例上运行。我们在代码中遇到了一个问题,如果 SOAP 请求超时,应用程序会创建 NullPointerException。

今天早上我们遇到了一个问题,SOAP 请求另一端的组件不可用。结果是大约一万个 NullPointerExceptions。在我们让失败的组件再次运行后,异常停止了。但是,我们注意到我们的应用程序仍然运行缓慢。

重启Tomcat服务后,应用性能立即提升。我发现这只是一个巧合,但我的队友们持怀疑态度。

所有这些 NPE 是否有可能在 Tomcat 中引起性能问题,但在异常停止很久之后?

谢谢!
IVR 复仇者

4

3 回答 3

2

有许多可能的问题:

  • 异常导致内存泄漏。
  • 异常导致某些线程中的无限循环。
  • 重新加载应用程序导致内存泄漏。
  • HotSpot 已针对异常失败的情况进行了优化(应该很快再次自行解决)。
于 2009-09-15T18:42:15.403 回答
0

Tomcat 记录所有活动 在您的情况下“一万个 NullPointerExceptions” 跟踪性能的一种方法是尝试捕获该异常并忽略。显然这不是解决方案,但您可以尝试发生什么。

于 2009-09-16T04:47:12.453 回答
0

我认为 NPE 不会特别引起任何问题,但如果处理不当,异常可能会导致问题。

例如,当我们有很多异常时,我们遇到了类似的问题。我们有一个包含所有用户会话的全局会话对象。我们通常在请求完成后清理它。但是,我们没有执行 finally 块,因此在发生异常时不会对其进行清理。这会导致内存泄漏并减慢服务器速度。

Tomcat 在重启后通常会变得更快,因此这可能是正常的,具体取决于您获得了多少改进。

于 2009-09-15T18:46:39.233 回答