3

我们的网络应用程序出现了非常奇怪的情况。它使用 Tomcat 6,Web 服务是用 Jersey 实现的。下面的服务调用旨在返回 JSON 数据。

以下抛出 OOM 异常:

http://mywebservices/get/some/data/for/1
http://mywebservices/get/some/more/data/for/12345
http://mywebservices/get/some/other/data/for/abc

但是,以下工作正常:

http://mywebservices/get/some/data/for/12345
http://mywebservices/get/some/more/data/for/1

这些只是为了显示正在发生的事情而编造的电话。我们有实时监控服务,可显示约 5 GB 的 JVM 可用内存。我们认为 Tomcat 向我们抛出的 OOM 是虚假/不正确的响应。有趣的是,即使对于完全不同的 Web 服务,浏览器上显示的堆栈跟踪也保持不变。我们非常确定我们看到了与 Web 服务请求完全无关的跟踪。所以我们正在弄清楚我们是否真的有泄漏。

同时,很高兴知道是否有人以前遇到过这种情况。

谢谢。

4

1 回答 1

1

好的,所以我们相信我们已经找到了这个问题的根本原因。由于使用了 ObjectOutputStream 和 ObjectInputStream,确实存在泄漏。

现在 ObjectOutputStream 有一个 reset() 方法可以清除引用,但 ObjectInputStream 没有类似的东西。

这个链接帮助了我们: Java out of heap space during serialization

于 2013-04-16T18:55:34.820 回答