我有一個垃圾收集問題,在我們的系統上,垃圾收集時間一直持續上升直到它達到25秒左右的常量。垃圾收集YGCT和垃圾收集時間不斷上升
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 84.18 76.65 35.47 60.16 441 15.581 16 1.834 17.415
75.72 0.00 97.32 35.47 60.16 442 15.770 16 1.834 17.604
0.00 64.69 35.56 35.86 60.16 443 16.318 16 1.834 18.153
100.00 0.00 19.91 35.87 60.16 444 16.381 16 1.834 18.215
0.00 70.61 40.85 36.82 60.17 445 17.488 16 1.834 19.322
28.80 0.00 19.61 36.82 60.17 446 17.535 16 1.834 19.369
34.51 0.00 48.01 36.82 60.18 448 17.561 16 1.834 19.395
0.00 10.86 20.48 37.11 60.21 453 17.979 16 1.834 19.813
9.04 0.00 47.39 37.12 60.23 454 18.063 16 1.834 19.898
0.00 71.26 2.65 37.14 60.23 455 18.173 16 1.834 20.007
63.64 0.00 90.91 38.04 60.23 456 19.562 16 1.834 21.396
0.00 76.45 42.70 38.04 60.23 457 19.592 16 1.834 21.426
這只是我執行一個小負載測試時的活動快照。
我回顧了一些快照,在這裏我不是專家,事實上找到了一些內存問題。明顯的問題現在已經解決。
該機具有以下設置
JAVA_OPTS="$JAVA_OPTS
-server
-Xms704m
-Xmx704m
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/log/tomcat6
-XX:MaxPermSize=192m
-XX:+UseConcMarkSweepGC
-XX:+CMSIncrementalMode
-XX:+CMSIncrementalPacing
-XX:+DisableExplicitGC
"
我們使用Java 6的Tomcat6,Spring框架,休眠的EHCache緩存和使用Quartz各種計劃任務。該項目link實際上幫助解決了導致MAT報告潛在內存泄漏的一些問題,這已不再是這種情況。
我們在我們的測試框中玩過各種各樣的JVM設置,但在所有情況下,垃圾收集時間一直在增長到令人無法接受的水平,這主要是因爲YGCT不斷增長。最初,我認爲緩存是罪魁禍首,因爲我們做緩存對象圖,而不僅僅使用Hibernate Second Level緩存。但是,在MAT中緩存的內存使用似乎並沒有超過18Mbs的大小。
這是內存泄漏還是我應該只是拋出更多的內存?如果是內存泄漏,我怎樣才能最好地調試在MAT?
WHY -Xms和-Xmx是否相等?理想情況下,它不應該是平等的。 –