我们的网络应用程序看到了一个非常奇怪的情况。它使用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服务请求,我们非常确定我们看到的跟踪完全不相关。所以我们要弄清楚我们是否确实有泄漏。
同时,很高兴知道以前是否有人遇到过这种情况。
感谢。
答案 0 :(得分:1)
好的,我们相信我们找到了这个问题的根本原因。由于使用了ObjectOutputStream和ObjectInputStream,确实存在泄漏。
现在,ObjectOutputStream有一个reset()方法可以清除引用,但ObjectInputStream没有类似的东西。