jboss java random приложение для полной заморозки GC - PullRequest
0 голосов
/ 13 декабря 2011

Привет, я работаю над java-приложениями с 6 сбалансированными серверами приложений, и я получил замораживающий полный gc (что приводит к превышению времени ожидания в приложении) случайным образом в 1 из них, около 1-2 серверов приложений в день.

GC.log

...

2011-12-13T10:38:36.576+0100: 79825.032: [GC [PSYoungGen: 874833K->66144K(1071936K)] 3516152K->2809316K(3868160K), 0.2535770 secs] [Times: user=0.94 sys=0.00, real=0.25 secs]
2011-12-13T10:38:36.830+0100: 79825.286: [Full GC [PSYoungGen: 66144K->0K(1071936K)] [ParOldGen: 2743171K->2753089K(2796224K)] 2809316K->2753089K(3868160K) [PSPermGen: 283256K->269894K(524288K)], 7.3616280 secs] [Times: user=25.14 sys=0.00, real=7.36 secs]
2011-12-13T10:38:46.152+0100: 79834.608: [Full GC [PSYoungGen: 752192K->0K(1071936K)] [ParOldGen: 2753089K->2751441K(2796224K)] 3505281K->2751441K(3868160K) [PSPermGen: 270340K->269781K(524288K)], 6.6231180 secs] [Times: user=22.52 sys=0.01, real=6.62 secs]
2011-12-13T10:38:54.591+0100: 79843.047: [Full GC [PSYoungGen: 752192K->0K(1071936K)] [ParOldGen: 2751441K->2719651K(2796224K)] 3503633K->2719651K(3868160K) [PSPermGen: 270670K->269784K(524288K)], 5.5780510 secs] [Times: user=19.75 sys=0.01, real=5.58 secs]

...

Мой обходной путь - это убить jboss и перезапустить его (не очень хорошее решение).

Это мой системный конф:

Mem: 6 Gb
Intel(R) Xeon(R) CPU           L5640  @ 2.27GHz (4 core)
java version "1.6.0_26"
Scientific Linux release 6.0 (Carbon)
jboss-4.0.5.GA

Параметры Jboss:

-Xms4G 
-Xmx4G 
-Dsun.rmi.dgc.client.gcInterval=3600000 
-Dsun.rmi.dgc.server.gcInterval=3600000 
-verbose:gc
-XX:+PrintGCDetails 
-XX:+PrintGCDateStamps 
-XX:PermSize=512m 
-XX:MaxPermSize=512m 
-XX:+CMSClassUnloadingEnabled 
-XX:+UseCompressedOops 
-XX:+DisableExplicitGC 
-XX:+UseParallelOldGC 
-XX:ParallelGCThreads=4 
-XX:+UseAdaptiveSizePolicy 
-XX:+AggressiveOpts 
-Xdebug

Кто-нибудь может мне помочь, пожалуйста? Спасибо

Ответы [ 2 ]

0 голосов
/ 13 декабря 2011

Я думаю, вам стоит заняться профилированием своего приложения, боюсь, другого выбора нет ... Заморозится ли full GC без кластера?Вы можете попробовать запустить другой GarbageCollector, но, вероятно, причиной такого поведения является утечка памяти где-то в вашем приложении или, по крайней мере, «подозрительно неправильная» обработка объекта с точки зрения потребления памяти.

Еще одна вещь, которую выможно создать дамп кучи в течение дня и посмотреть, есть ли какая-либо разница, которая может указать на проблему.

Кстати, я полагаю, что это 64-битные java и jboss, верно?:) Для 32-битных приложений немного проблематично обрабатывать 4 ГБ памяти в одном процессе ...

0 голосов
/ 13 декабря 2011

Вы пытались использовать политику адаптивного определения размера: -XX: + UseAdaptiveSizePolicy и -XX: MaxGCPauseMilis = 100 и -XX: GCTimeRatio = 19?

Если это не поможет, то Concurrent Mark Sweep Collector (-XX: UseConcMarkSweepGC)?

Если у вас есть время, посмотрите презентацию под названием «Все, что я когда-либо узнал о настройке производительности JVM @Twitter» ( слайды , видео ), это объясняет компромиссы, когда приходит к выбору GC.

...