請教 關於記憶體洩漏的檢測方法

jstxqgb發表於2007-04-10
現在檢索200條左右資料就會在下次檢索時outofmemory。
直接在opensessioninviewfilter那裡掛掉了,跟不進程式碼阿。
最奇怪的就是為什麼在第一次select 200條資料時,只佔用了20M左右。
直到下一次檢索2,3條資料時,一下子暴到200M呢?

[GC 24760K->22810K(29880K), 0.0023559 secs]
Hibernate: select ...
(這裡檢索200條資料,檢索完了。回收時一共才20M)

[GC 24794K->22929K(29880K), 0.0022210 secs]
session MainMenuInfo : common.util.MainMenuInfo@e6df19
session UserInfo : common.util.LoginUserInfo@14e8936
session K0200MenuForm : K02.form.K0200MenuForm@61b29f
session K02_TEMP_K0201001OrgSelectForm : K02.form.K0201001OrgSelectForm@1a626ac
session org.apache.struts.action.LOCALE : ja
class org.apache.catalina.core.ApplicationFilterChain

[GC 24790K->23612K(29880K), 0.0057686 secs]

[GC 25435K->25408K(29880K), 0.0071911 secs]

[GC 27230K->27203K(29880K), 0.0062332 secs]

[GC 29027K->28998K(31180K), 0.0061798 secs]

[Full GC[Unloading class sun.reflect.GeneratedMethodAccessor123]

[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor2]

[Unloading class sun.reflect.GeneratedMethodAccessor154]

[Unloading class sun.reflect.GeneratedMethodAccessor155]

[Unloading class sun.reflect.GeneratedMethodAccessor150]

[Unloading class sun.reflect.GeneratedMethodAccessor147]

[Unloading class sun.reflect.GeneratedMethodAccessor146]

[Unloading class sun.reflect.GeneratedMethodAccessor148]

[Unloading class sun.reflect.GeneratedMethodAccessor152]

[Unloading class sun.reflect.GeneratedMethodAccessor89]

[Unloading class sun.reflect.GeneratedMethodAccessor110]

[Unloading class sun.reflect.GeneratedMethodAccessor86]

[Unloading class sun.reflect.GeneratedMethodAccessor151]

[Unloading class sun.reflect.GeneratedConstructorAccessor38]

[Unloading class sun.reflect.GeneratedMethodAccessor153]

[Unloading class sun.reflect.GeneratedMethodAccessor88]
28998K->24461K(31180K), 0.3669290 secs]

[GC 27069K->27026K(43908K), 0.0046235 secs]

[GC 29629K->29591K(43908K), 0.0042978 secs]

[GC 32195K->32155K(43908K), 0.0049096 secs]

[GC 34759K->34720K(43908K), 0.0050124 secs]

[GC 37324K->37285K(43908K), 0.0050249 secs]

[GC 39889K->39849K(43908K), 0.0051174 secs]

[GC 42453K->42414K(45468K), 0.0050942 secs]

[Full GC 42414K->40955K(45468K), 0.3308669 secs]

[GC 45381K->45315K(73444K), 0.0067525 secs]

[GC 49741K->49675K(73444K), 0.0080516 secs]

[GC 54101K->54035K(73444K), 0.0078046 secs]

[GC 58461K->58395K(73444K), 0.0077898 secs]

[GC 62820K->62755K(73444K), 0.0079532 secs]

[GC 67182K->67114K(73444K), 0.0078652 secs]

[GC 71541K->71475K(76304K), 0.0085567 secs]

[Full GC[Unloading class sun.reflect.GeneratedMethodAccessor49]
71475K->71475K(76304K), 0.2570003 secs]

[GC 78764K->78656K(127228K), 0.0804133 secs]

[GC 86466K->86350K(127228K), 0.0164222 secs]

[GC 94161K->94043K(127228K), 0.0194583 secs]

[GC 101854K->101739K(127228K), 0.0153807 secs]

[GC 109548K->109432K(127228K), 0.0188826 secs]

[GC 117242K->117126K(127228K), 0.0209809 secs]

[GC 124937K->124819K(133208K), 0.0165180 secs]

[Full GC 124819K->124819K(133208K), 0.2503483 secs]

[GC 137837K->137645K(222296K), 0.0957457 secs]

[GC 151442K->151237K(222296K), 0.0276680 secs]

[GC 165034K->164829K(222296K), 0.0261955 secs]

[GC 178625K->178421K(222296K), 0.0403532 secs]

[GC 192222K->192017K(222296K), 0.0248087 secs]

[GC 205821K->205609K(222296K), 0.0247825 secs]

[GC 219412K->219201K(233216K), 0.0272929 secs]

[Full GC 219201K->219201K(233216K), 0.2625688 secs]

[GC 233783K->233562K(260160K), 0.1095519 secs]
(下一次檢索2,3條資料時的垃圾回收)
Hibernate: select stf.staff_Id, stf.staff_Name...
(真正開始執行檢索)

還有就是測試資料庫一共才10M左右,為什麼一兩次檢索就會弄出這麼多記憶體呢?

開發階段,不讓研究這個問題-_-!
就讓截了幾張圖證明問題在spring框架裡(因為確實錯誤資訊在spring的filter裡面,沒執行到程式碼就爆了)
雖然我知道是程式碼裡面有記憶體洩漏,但是找不到,不會找。
希望高手指點一下

相關文章