2013-04-16 71 views
3

我們看到了一個非常奇怪的情況與我們的Web應用程序。它使用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 

這些都是編造的來電顯示發生了什麼。我們有實時監控服務,可爲JVM顯示〜5 GB的可用內存。 我們相信Tomcat向我們投擲的OOM是一個假的/不正確的迴應。有趣的是,即使是完全不同的Web服務,瀏覽器上顯示的堆棧跟蹤仍然保持不變。我們非常肯定,鑑於Web服務請求,我們正在看到完全不相關的跟蹤。所以我們正在弄清楚我們是否真的有泄漏。

與此同時,知道以前是否有人遇到過這種情況會很高興。

謝謝。

+2

你能提供從堆棧跟蹤,因爲這可能是有用的任何信息? –

+0

請發佈堆棧跟蹤。我們還希望看到在請求這些資源時執行的代碼。什麼是虛擬機參數? –

+0

@PeterLawrey即使完全不同的Web服務請求,堆棧跟蹤在瀏覽器上仍然保持不變。一個假的。將稍後發佈堆棧跟蹤。 –

回答

1

好的,所以我們相信我們已經找到了這個問題的根源。由於使用了ObjectOutputStream和ObjectInputStream,確實存在泄漏。

現在ObjectOutputStream有一個reset()方法,可以清除引用,但ObjectInputStream沒有這樣的內容。

此鏈接幫助我們: Java out of heap space during serialization