SocketException между нашите Load Balancers и Tomcat по време на събиране на отпадъци

Забелязахме следния проблем: всеки път, когато нашата Tomcat JVM изпълнява пълен GC, заявките за създаване на връзка между LB и Tomcat са неуспешни. Това е много проблематично, тъй като всички тези заявки никога няма да получат шанса да стигнат до сървъра за приложения.

Този проблем възникна дори когато сме насочили един Tomcat към другия без LB между тях.

Има ли някаква дефиниция, която може да се направи в JVM / Tomcat / Linux, която ще направи HTTP връзката да изчака времето, докато GC приключи и приложението JVM ще получи заявката.

Ние използваме Java6, Tomcat7 и Linux Ubuntu OS.

Благодаря, Йоси


person Yosi Botzer    schedule 14.06.2011    source източник


Отговори (2)


Обмисляли ли сте използването на паралелния събирач на боклук с помощта на опцията „XX:+UseConcMarkSweepGC“? Това по същество извършва събиране на боклук във фонов режим, така че да няма почти толкова много (ако има такива) пълни GC за „спиране на света“.

person btreat    schedule 14.06.2011
comment
Опитах тези опции, редът с бутони е, че в даден момент може да се случи пълен GC и не искам да губя клиенти, които се опитват да се свържат по време на тази пауза, затова търся нещо в дефинициите на TCP ниво - person Yosi Botzer; 14.06.2011
comment
Въпреки че никога не можете да гарантирате, че пълен GC няма да се случи, можете да ги предотвратите на практика. Първо се уверете, че купчината за tomcat е с подходящ размер. Второ, можете да използвате следната опция, за да задействате точката, в която ще бъде инициирано фоново събиране: -XX:CMSInitiatingOccupancyFraction=‹value›. Стойност от, да речем, 75 би инициирала фоново събиране, когато купчината достигне 75% капацитет. - person btreat; 14.06.2011
comment
Ще трябва да коригирате тези две настройки, за да се уверите, че XX:CMSInitiatingOccupancyFraction е достатъчно нисък, за да може фоновият колектор да има време да работи, преди купчината да е напълно изчерпана (в противен случай се получава пълен GC). XX:CMSInitiatingOccupancyFraction също трябва да бъде достатъчно висока, за да не се задейства постоянно колекторът на заден план, когато системата се разтоварва. - person btreat; 14.06.2011

Може да се наложи да активирате едновременното събиране на отпадъци, както е описано в http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

-XX:+UseConcMarkSweepGC

Опитайте и други конфигурации на GC.

person Alex Gitelman    schedule 14.06.2011