奇怪的内存异常

时间:2013-04-16 07:06:29

标签: java jersey out-of-memory tomcat6

我们的网络应用程序看到了一个非常奇怪的情况。它使用Tomcat 6,并且使用Jersey实现Web服务。下面的服务调用旨在返回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

这些只是调用以显示正在发生的事情。我们有实时监控服务,为JVM显示约5 GB的可用内存。 我们认为Tomcat向我们投掷的OOM是假的/不正确的响应。有趣的是,即使对于完全不同的Web服务,浏览器上显示的堆栈跟踪仍然是相同的。鉴于Web服务请求,我们非常确定我们看到的跟踪完全不相关。所以我们要弄清楚我们是否确实有泄漏。

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

感谢。

1 个答案:

答案 0 :(得分:1)

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

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

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