저는 최근 Java Server에서 메모리 사용을 벤치마킹하고 최적화하기위한 작업을 수행하면서 메모리 누수가있는 경우이를 수정했습니다. 우리는 15G 물리적 메모리와 32G 스왑 메모리가있는 단일 머신에서 4 개의 JVM 서버를 실행합니다. 다음은 free -m
스냅 샷입니다.JVM 메모리 최적화 이해
total used free shared buff/cache available
Mem: 15289 14786 392 1 110 342
Swap: 32767 3776 28991
내가 제대로 이해한다면 : -
- 실제 메모리의 대부분을 사용하고 스왑 메모리의 대부분은 무료입니다.
- 메모리 양이 실제로 버퍼링됩니다.
- 나는 지금 내 서버의 각
-Xmx
옵션을 설정7G
최대 힙 크기와 실행
가상 메모리의 48기가바이트 있습니다. GC Utils의 출력은 다음과 같습니다.
$ jstat -gcutil 8317
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 6.97 0.22 96.77 91.89 72 8.027 33 10.975 19.002
$ jstat -gcutil 8332
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 5.17 50.76 96.57 91.65 274 51.001 51 179.106 230.107
$ jstat -gcutil 8249
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 2.10 80.37 69.53 96.87 92.08 421 69.478 13 56.569 126.047
$ jstat -gcutil 23875
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
27.91 0.00 37.07 86.29 97.59 94.60 232 7.294 2 0.030 7.324
수동 GC 실행 후 모든 서버에서 젊은 세대와 구세대를 완전히 제거했습니다. 이제이 성격을 이해하는 데 도움이 필요합니다. 기본적으로 다음과 같이 가정합니다.
- 객체 장수에 따라 에덴으로 수를 생존으로 이동 -> S0 -> S1 - 서버의
- 세> O. 는 이전 세대> 젊은 장군은 그 전체 GC가 실행되고 있지 않음을 의미 하는가가 충분히?
- 또는 젊은 세대에게 개체를 수집 할 기회를 더 많이 주며 이전 공간으로 개체를 이동하는 데 지연을주기 위해 SurvivorRatio 및 NewRatio 등의 설정을 조정해야합니다.
- 그러나 Y 공간이 늘어남에 따라 GC가 짧아지고 응용 프로그램 처리량이 떨어지는 것을 의미합니다. 메모리를 늘려서 조정해야 할 필요가 없습니까?
Full GC는 메모리를 모두 비우므로 메모리 누수가 없으므로 GC 설정을 조정하여 메모리 사용량과 응용 프로그램 사이의 균형을 어떻게 잡을 수 있습니까? 누구든지 기계 상태 이상으로 고려하여 더 많은 방향 또는 권장을 제공 할 수 있습니까?
한마디로JVM Details:
Java Version: openjdk version "1.8.0_131" Server Class
GC: Parallel Collector(Default one)
답해 주셔서 감사합니다. 그러나 무언가는 여전히 분명합니다. 전체적인 초점은 서버가 7g를 필요로하지 않는다는 것입니다. YG는 개체를 수집 할 충분한 기회를 얻지 못했고 OG는 일반적으로 좋은 일이므로 덜 자주 실행했습니다. Y 공간을 늘리면이 문제를 해결할 수 있습니다. YGCT가 증가 할 수 있습니다. 그러나 YG의 증가로 인해 OOM으로 이어질 수 있다는 점은 분명하지 않습니다. 힙 크기는 여전히 동일합니다. –
마이너 컬렉션에 남아있는 요소가 있으면 OOM이 발생합니다.이 요소는 보유자에게 대피되고 보유자는 보유 할 공간이 충분하지 않습니다. 기본적으로 OOM에 관해서는 젊음은 완전히 무의미합니다. 더 큰 젊은 공간은 사소한 콜렉션을 덜 빈번하게 (그리고 전체 프로세스를보다 효율적으로) 만들 것입니다. 그러나 더 큰 청년은 상대적으로 작아서 OOM을 유발할 수 있습니다. – Jonathan
@MangatRaiModi 나는 아직도 요점을 모르겠다 : 왜 당신은 전체 gcs가 더 자주 실행해야한다고 생각합니까? 보통이 영역에서 최적화 할 때 가능한 한 많이 수집 빈도를 줄이기를 원합니다. 이는 젊은뿐만 아니라 오래된 사람들에게도 적용됩니다. – Jonathan