我知道session.invalidate()
發佈httpsession。但是當我監視容器內存時,它不會下降。以下是我觀察 -簡單的方法從Java Web應用程序的內存中清理無效的會話
- 登錄(我的應用程序創建一個會話)
- 用戶執行某些活動,增加進程的內存。
- 註銷。 (註銷控制器明確地使會話無效)
- 監視進程內存。它永遠不會下降。
最初我以爲,垃圾收集可能只有在達到低內存可用狀態後才能工作。爲了證實這一點,我使用-Xmx來減少內存。但仍然是同樣的錯誤。事實上,當我使用單獨的瀏覽器進行相同的活動時,我看到了OOM錯誤。
這裏有什麼遺漏嗎?
它可能不是實際上是已佔用的堆空間的會話數據。考慮使用「jmap -dump:file =/tmp/heap.hprof」來獲取進程堆的快照,然後使用像Eclipse MAT這樣的工具來查看實際內容。 –
GargantuChet
我嘗試了這一點,並確定在轉儲分析後,內存中的數據是用戶在登錄時執行的過程。 – user1401472
Eclipse MAT還可以告訴您哪些對象負責在內存中保留特定對象。 「Dominator」報告對此很有幫助 - 如果存在仍然保存數據的線索或對象,則可以使用支配者信息來確定它是什麼。我意識到這不是很具體,但除非有什麼被破壞,容器不應該保留舊的會話數據。有機會有另一個對象持有參考。 – GargantuChet