2012-12-08 3 views
3

퍼미션이 가비지 수집되기 전에 "Full GC"가 3 번 연속되는 이유는 무엇입니까?왜 permeg 수집을 위해 Full GC가 3 번 걸립니까?

첫 번째 GC는 2.4GB에서 761MB로 힙을 가져 왔지만 6K를 복구하는 것으로 보일지라도 실질적으로 GC perm gen은 실패합니다.

우리는 젊은 세대 컬렉션을 무시합니다.

두 번째 Full GC는 서버가 가볍게로드되었으므로 예상 한대로 힙에 거의 영향을주지 않습니다. 이상한 점은 파마 인에게는 아무런 성과가 없다는 것입니다.

세 번째 Full GC는 마침내 최대 524MB에서 최대 141MB로 perm 화됩니다.

2012-12-07T19:46:40.731-0600: [Full GC [CMS: 2474402K->761372K(2804992K), 4.6386780 secs]  2606228K->761372K(3111680K), [CMS Perm : 524286K->524280K(524288K)], 4.6387670 secs] [Times: user=4.68 sys=0.00, real=4.63 secs] 
2012-12-07T19:46:45.374-0600: [GC [ParNew 
Desired survivor size 17432576 bytes, new threshold 6 (max 6) 
- age 1:  65976 bytes,  65976 total 
: 1552K->8827K(306688K), 0.0199700 secs] 762925K->770200K(3111680K), 0.0200340 secs] [Times: user=0.08 sys=0.00, real=0.02 secs] 
2012-12-07T19:46:45.395-0600: [Full GC [CMS: 761372K->752917K(2804992K), 3.7379280 secs] 770212K->752917K(3111680K), [CMS Perm : 524287K->524287K(524288K)], 3.7380180 secs] [Times: user=3.77 sys=0.00, real=3.74 secs] 
2012-12-07T19:46:49.135-0600: [Full GC [CMS: 752917K->693347K(2804992K), 3.2845870 secs] 752917K->693347K(3111680K), [CMS Perm : 524287K->141759K(524288K)], 3.2846780 secs] [Times: user=3.32 sys=0.00, real=3.29 secs] 

시스템 정보와 GC 플래그 :

Java 1.7.0_07, 64-Bit Server, Unbuntu 12.04 
-Xms3g -Xmx3g -XX:PermSize=512m -XX:MaxPermSize=512m 
-XX:+UseConcMarkSweepGC 

편집 :

여기에 GC 로그에서 편집되지 않은 단편이다 우리는이 개 응용 프로그램 서버가; 두 번째 항목은 약간 다른 동작을 보였으며 두 개의 Full GC 항목 만있었습니다.

2012-12-07T20:36:31.097-0600: [Full GC [CMS: 2307424K->753901K(2804992K), 5.0783720 secs] 2394279K->753901K(3111680K), [CMS Perm : 524280K->524121K(524288K)], 5.0784780 secs] [Times: user=5.12 sys=0.00, real=5.08 secs] 
2012-12-07T20:36:36.178-0600: [Full GC [CMS: 753901K->695698K(2804992K), 3.4488560 secs] 755266K->695698K(3111680K), [CMS Perm : 524121K->140568K(524288K)], 3.4489690 secs] [Times: user=3.48 sys=0.00, real=3.45 secs] 

젊은 세대가 중요한 것처럼 보입니다. 아마도 우리의 특정 설정에서 퍼미션을 수집하는 쓰레기 수거 사이에 다른 GC (젊은 세대 GC)가없는 두 개의 연속적인 Full GC가 필요할 것입니다. 나는 많은 것을 파헤 쳤지 만이 행동에 대한 어떤 논의도 찾지 못했습니다.

답변

0

힙과 퍼머 겐의 동시 콜렉션이 서로 영향을 미치지 않는다는 것을 놀라게하지 않을 것입니다. 특히 힙 콜렉션은 이미 그 자체로 복잡한 작업입니다. 저것은 파마 gen가 단지 두번째로 모으는 이유를 설명 할 것이다. 나는 주로 추측하고있다.

실제로 perm gen (언로드 된 클래스, 문자열)에서 수집 된 것에 대한 자세한 내용은 흥미로울 수 있습니다. -XX : + PrintGCDetails가 도움이 될 것이며, 아마도 -verbose : class가 될 것입니다.