JVM зависает из-за бесконечного GC - PullRequest
4 голосов
/ 05 сентября 2011

У меня есть огромное приложение, работающее на сервере Glassfish, которое создает множество недолговечных объектов, и у меня есть следующая конфигурация GC в JVM.

-XX:+DisableExplicitGC
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-XX:-UseAdaptiveSizePolicy
-XX:PermSize=256m
-XX:MaxPermSize=1024m
-Xms7g
-Xmx7g
-XX:NewRatio=2

Но JVM зависает с Infinite GC.Я должен перезапустить JVM.Я получаю следующую информацию из журнала GC.

2.855: [GC 734029K->9736K(7034240K), 0.0133500 secs]
2.869: [Full GC 9736K->9501K(7034240K), 0.1043570 secs]
13.254: [GC 681231K->26506K(7034240K), 0.0251050 secs]
13.280: [Full GC 26506K->26082K(7034240K), 0.2904930 secs]
13.589: [GC 103156K->26224K(7034240K), 0.0015940 secs]
13.590: [Full GC 26224K->24440K(7034240K), 0.2254710 secs]
35.478: [GC 1859512K->131673K(7034240K), 0.0781300 secs]
41.603: [GC 1966745K->351954K(7034240K), 0.1858590 secs]
46.012: [GC 2187026K->502362K(7034240K), 0.2329020 secs]
51.850: [GC 2337434K->608654K(7034240K), 0.2012410 secs]
72.584: [GC 2443726K->727923K(7034240K), 0.2203390 secs]
80.239: [GC 2562995K->894770K(7034240K), 0.2323490 secs]
106.221: [GC 2729842K->1265916K(7034240K), 0.2800630 secs]

Пожалуйста, дайте мне знать, правильны ли настройки jvm GC для этого случая использования.Или Любая помощь для решения этой проблемы очень ценится.

Обновление Я также получил информацию о дампе кучи jmap.PS Старое поколение, кажется, держит большую часть памяти, даже когда никто не использует его.Он не увеличивается (что будет в случае утечки памяти).

using thread-local object allocation.
Parallel GC with 8 thread(s)

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 7516192768 (7168.0MB)
   NewSize          = 5439488 (5.1875MB)
   MaxNewSize       = 17592186044415 MB
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 268435456 (256.0MB)
   MaxPermSize      = 1073741824 (1024.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 2244935680 (2140.9375MB)
   used     = 863166976 (823.18017578125MB)
   free     = 1381768704 (1317.75732421875MB)
   38.44951923076923% used
From Space:
   capacity = 112525312 (107.3125MB)
   used     = 47609824 (45.404266357421875MB)
   free     = 64915488 (61.908233642578125MB)
   42.31032392071928% used
To Space:
   capacity = 114753536 (109.4375MB)
   used     = 0 (0.0MB)
   free     = 114753536 (109.4375MB)
   0.0% used
PS Old Generation
   capacity = 5010817024 (4778.6875MB)
   used     = 4385643424 (4182.475494384766MB)
   free     = 625173600 (596.2120056152344MB)
   87.52351967741699% used
PS Perm Generation
   capacity = 458031104 (436.8125MB)
   used     = 432700088 (412.6549606323242MB)
   free     = 25331016 (24.15753936767578MB)
   94.46958606549131% used

Ответы [ 3 ]

3 голосов
/ 05 сентября 2011

Можете ли вы отменить ParallelOldGC?Кажется, это вызывает фрагмент памяти.

Или вы можете попробовать добавить

-XX: + UseCMSCompactAtFullCollection и -XX: CMSFullGCsBeforeCompaction = 0

Также вы можете добавить -server. Кажется, всегда используется для серверастороннее Java-приложение.

Не уверен, что оно может помочь.Потому что я не могу попробовать это для тебя.

1 голос
/ 05 сентября 2011

Не уверен, что это помогает, но вы можете использовать дополнительный параметр:

      -XX:ParallelGCThreads=10  //10 threads for GC

, чтобы уменьшить количество потоков GC по умолчанию.

0 голосов
/ 10 сентября 2011

Проблема может быть в том, что для Xmx и Xms установлено одинаковое большое значение 7g.Почему бы вам не установить Xms на более низкое значение?ИМХО, это надо исправить.

...