2013-11-14 2 views
4

독립 실행 형 JVM에서 Java 응용 프로그램을 실행하고 있습니다. 이 앱은 하나 이상의 소켓에있는 데이터를 수신 대기하고 데이터를 대기열에 넣으며 대기열에서 데이터를 가져 와서 유지합니다. 모든 데이터 요소는 작은 문자열, 정수 또는 Long이지만 데이터는 넓으며 레코드 당 700 개의 데이터 요소가 있습니다.높은 개체 G1GC로 긴 가비지 수집을 일시 중지하는 복사 시간이

앱은 매끄럽게 실행되며 때로는 30 분에서 1 시간 동안 실행되지만 하나 이상의 긴 가비지 수집 일시 중지가 발생합니다. 대부분의 일시 중지 시간은 오브젝트 복사 시간에 소요됩니다. sys 시간은 다른 콜렉션에 비해 상대적으로 높습니다. 여기

java version "1.7.0_03" 
Java(TM) SE Runtime Environment (build 1.7.0_03-b04) 
Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02, mixed mode) 

이 JVM 옵션은 다음과 같습니다 :

-XX:MaxPermSize=256m -XX:PermSize=256m -Xms3G -Xmx3G -XX:+UseG1GC -XX:-UseGCOverheadLimit 

과정은 4 개 코어 (같은 소켓에있는 모든)에 taskset이지만, 거의 2를 사용하고 여기에

는 JVM의 세부 사항입니다 그들의. 이 상자의 모든 프로세스는 자신의 코어에 고정됩니다 (0 ansd 1 unused). 컴퓨터에는 여유 메모리 (20 + G)가 많으며 상단에는 2.5G의 RES 메모리를 사용하는 프로세스가 표시됩니다. 여기

는 개체 복사 시간과 SYS 시간이 너무 높다 어떻게 수습 할 이유에

[Object Copy (ms): 2090.4 2224.0 2484.0 2160.1 1603.9 2071.2 887.8 1608.1 1992.0 2030.5 1692.5 1583.9 2140.3 1703.0 2174.0 1949.5 1941.1 2190.1 2153.3 1604.1 1930.8 1892.6 1651.9 

[Eden: 1017M(1017M)->0B(1016M) Survivors: 7168K->8192K Heap: 1062M(3072M)->47M(3072M)] 

[Times: user=2.24 sys=7.22, real=2.49 secs] 

어떤 아이디어 ... GC의 로그 출력의 일부인가? 거의 동일한 에덴/생존자/힙 크기로 10 또는 20 밀리 초 밖에 걸리지 않는 로그에 수많은 가비지 콜렉션이 있습니다.

답변

0

이 필요합니까? 힙이 3GB입니까? 가비지 콜렉션 일시 정지는 힙이 커지면 길어지고, GC가 마침내 필요할 때 수행해야 할 작업이 더 적기 때문에 (덜 자주 발생 함)

최소한 힙을 3 기가로 설정 한 것으로 보입니다. 앱에 3 기가비트가 필요하지 않은 경우이 방법을 사용하여 강제로 그만큼 많이 사용하게됩니다. 결국 3G가 수집되어야 할 때 일시적인 일시 중지가 발생합니다.

Eclipse IDE에서 반응성을 조정하는 데 꽤 시간을 보냈고, 조밀 한 힙 크기의 초기에는 큰 것보다 '일시 중지'특성이 좋았다.

JVM 힙 설정과는 별도로 코드에서 'nulls out'데이터 요소 & 수집 항목을 삭제하므로이 항목을 폐기 할 수 있습니다.

이 방법은 java.util 컬렉션 패키지의 표준 방식이지만 이점을 누릴 수있는 코드가있을 수 있습니다. 700여 가지의 기록이 특히 GC의 일을 단순화하고 '부차적 인 GC'스윕에서 더 나은 정리를 가능하게하는이 연습의 후보가 될 수 있습니다.

+0

입력 해 주셔서 감사합니다. 예, 3G가 필요합니다. 컬렉션의 빈도는 지역이 얼마나 빨리 채워질지를 기준으로합니다. G1GC는 더 큰 힙을 위해 특별히 설계되었으며 증분 수집기입니다. 'G1의 첫 번째 초점은 제한된 GC 대기 시간으로 많은 힙을 필요로하는 응용 프로그램을 실행하는 사용자에게 솔루션을 제공하는 것입니다.이는 약 6GB 이상의 힙 크기와 0.5 초 미만의 안정적이고 예측 가능한 일시 정지 시간을 의미합니다. ' – user2992915

+0

오브젝트가 처리 된 후에'오브젝트를 널링 '한 다음 연결 해제 구조에 특히주의하십시오. 모든 구조체를 충분히 파괴 할 수 있다면, GC는 그러한 주요 중단을 필요로하지 않고 이전에 조각을 정리하는 데 도움이 될 수 있습니다. –

1

3gb는 큰 힙이 아니며 생존자 크기도 작습니다. 그 코어에서 달리면 안되니? 얼마나 많은 쓰레기가 발생하고 얼마나 자주 수집합니까? G1GC 없이도 사용해 볼 수 있습니다.