2011-09-14 3 views
4

JBoss AS5에서 실행되는 웹 응용 프로그램에서 튜닝 벤치 마크를 수행하고 있습니다.JVM이 항상 FULL GC로 시작하는 이유는 무엇입니까?

저 부하에서부터 스트레스 부하까지 JMeter를 사용하여 다양한 시나리오를 만들고 있습니다.

내가 알아챈 점은 GC 로그가 항상 전체 GC로 시작된다는 것입니다.

누군가가이 동작을 설명 할 수 있습니까?

미리 감사드립니다. 그것은 항상 GC로 시작하지 않는

17.560: [Full GC [PSYoungGen: 44456K->0K(458752K)] [ParOldGen: 0K->4385K(1572864K)]  44456K->4385K(2031616K) [PSPermGen: 11565K->11555K(262144K)], 0.9226691 secs] 
72.478: [GC [PSYoungGen: 393216K->30720K(458752K)] 397601K->35105K(2031616K), 0.1787110 secs] 
112.137: [GC [PSYoungGen: 423936K->38912K(458752K)] 428321K->43297K(2031616K), 0.2197971 secs] 
188.297: [GC [PSYoungGen: 432128K->54272K(458752K)] 436513K->58657K(2031616K), 0.3034273 secs] 
309.100: [GC [PSYoungGen: 447488K->60416K(458752K)] 451873K->64801K(2031616K), 0.3111470 secs] 
430.354: [GC [PSYoungGen: 453632K->65536K(454848K)] 458017K->72129K(2027712K), 0.3374716 secs] 
546.078: [GC [PSYoungGen: 454848K->65536K(415104K)] 461441K->78881K(1987968K), 0.3746511 secs] 
652.116: [GC [PSYoungGen: 415104K->40960K(436928K)] 428449K->88641K(2009792K), 0.3895185 secs] 
765.134: [GC [PSYoungGen: 390528K->28672K(437632K)] 438209K->94882K(2010496K), 0.2703870 secs] 
870.726: [GC [PSYoungGen: 380800K->23552K(375680K)] 447010K->102114K(1948544K), 0.1948568 secs] 
976.144: [GC [PSYoungGen: 375680K->18432K(436096K)] 454242K->110306K(2008960K), 0.1734677 secs] 

답변

0

Jboss 커뮤니티의 피터 존슨 (Peter Johnson)의 도움으로. 나는이 질문에 대한 답을 알 수 있었다.

여기를 작성하여 공유하고 있습니다.

으로 System.gc()에 대한 호출은 응용 프로그램 서버에 코딩 (또는 사용하는 라이브러리 중 하나에 - 나는이 (가) RMI 라이브러리 GC 통화를하고자 알고)가에서 전환으로, 나는 의심 응용 프로그램 서버 자체에 대한 부트 스트랩. 나는 또한 배포 또는 다른 주요 초기화 작업 후에 또 다른 GC를 수행 할 수도 있다고 생각합니다. 이 문제는 사용자 요청을 처리하기 전에 힙을 가능한 깨끗하게 정리하는 것이 중요하다고 생각합니다. 물론, 서버가 그렇게 많은 메모리를 가지지 않고 힙이 더 작았던시기가 수년 전에 이루어졌습니다. 4.0.x에서 5.x까지 JBoss AS 릴리스에서이 동작을 보았습니다 (6에서 GC 동작을 모니터링하지 않았습니다).

2

, 당신은 프로그램 결코 GC가있을 수 있습니다 :

FWIW는 여기 GC 로그에서 발췌입니다.

그러나 JVM이 시작될 때 기본적으로 최소량의 메모리가 사용됩니다.

응용 프로그램이 데이터 구조를 구축 중이며 높은 비율의 개체가 유지됩니다. 이는 정상적인 행동이 아니며 생존자 공간이 고갈 될 수 있습니다. JVM은 새로 생성 된 대부분의 객체가 삭제 될 것이라고 가정하도록 조정됩니다. 생존자 공간이 고갈되면 Full GC가 트리거됩니다.

당신이 전체 GC 멀리 갈 것

-ms512m -mx1g 

같은 옵션을 사용할 수 있습니다 당신은 덜 자주 수집에 응용 프로그램이 증가 할 메모리 양을 알고 있기 때문에.

+0

+ 피터 답변 해 주셔서 감사합니다. 이 옵션은 다음과 같이 설정됩니다 : -Xms2g -Xmx2g –

+0

이 경우에는 새 크기'-XX : NewSize = 1g'을 설정하려고합니다. 일반적으로 새 응용 프로그램의 경우 8GB의 새로운 크기로 시작하여 축소합니다. ;) –

+0

+ Peter 다시 한번 감사드립니다. 그러나 젊은 세대의 크기를 힙 8GB보다 더 크게 설정할 수있는 방법은 무엇입니까? 새 크기를 -XX로 설정 한 후에도 –

관련 문제