독립 실행 형 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 밀리 초 밖에 걸리지 않는 로그에 수많은 가비지 콜렉션이 있습니다.
입력 해 주셔서 감사합니다. 예, 3G가 필요합니다. 컬렉션의 빈도는 지역이 얼마나 빨리 채워질지를 기준으로합니다. G1GC는 더 큰 힙을 위해 특별히 설계되었으며 증분 수집기입니다. 'G1의 첫 번째 초점은 제한된 GC 대기 시간으로 많은 힙을 필요로하는 응용 프로그램을 실행하는 사용자에게 솔루션을 제공하는 것입니다.이는 약 6GB 이상의 힙 크기와 0.5 초 미만의 안정적이고 예측 가능한 일시 정지 시간을 의미합니다. ' – user2992915
오브젝트가 처리 된 후에'오브젝트를 널링 '한 다음 연결 해제 구조에 특히주의하십시오. 모든 구조체를 충분히 파괴 할 수 있다면, GC는 그러한 주요 중단을 필요로하지 않고 이전에 조각을 정리하는 데 도움이 될 수 있습니다. –