Java 가비지 컬렉션 로그 메시지
가비지 컬렉션 정보를 로그에 덤프하도록 Java를 설정했습니다(상세 GC).로그의 가비지 컬렉션 엔트리의 의미를 알 수 없습니다.이러한 엔트리의 예를 다음에 나타냅니다.구글에서 찾아봤지만 확실한 설명을 찾지 못했어요.
저는 몇 가지 합리적인 추측을 하고 있습니다만, 엔트리의 숫자가 무엇을 의미하는지, 신뢰할 수 있는 소식통에 의해 뒷받침되는 정확한 정의를 얻을 수 있는 답을 찾고 있습니다.태양 문서를 인용하는 모든 답변에 대한 자동 +1입니다.질문은 다음과 같습니다.
- 싸이웅젠은 무엇을 의미합니까?이전 세대(젊은 세대)와 관련이 있다고 생각합니다만, 정확히 어떤 것입니까?
- 두 번째 세 번째 세 번째 숫자와 첫 번째 세 번째 숫자의 차이점은 무엇인가요?
- 왜 이름(PSYoungGen)은 두 번째 숫자가 아닌 첫 번째 세 번째 숫자에는 지정됩니까?
- 트리플렛의 각 숫자(메모리 크기)는 무엇을 의미합니까?예를 들어, 109884K->14201K(139904K)에서는 GC 109884k 이전의 메모리가 14201K로 감소합니다.세 번째 숫자는 어떻게 관련되어 있습니까?왜 두 번째 숫자가 필요하죠?
8109.128 : [GC [ PYoungGen : 109884K - > 14201K ( 139904K ) ]691015K - > 595332K ( 1119040K), 0.04530초]
8112.111 : [GC [ PYoungGen : 126649K -> 15528K ( 142336K ) ]707780K -> 605892K (1121472K), 0.094560초]
8112.802: [GC [PSYoungGen : 130344K -> 3732K ( 118592K )]720708K -> 607895K (1097728K), 0.0682690초]
- PSYungGen은 마이너 컬렉션에 사용 중인 가비지 컬렉터를 말합니다.PS는 Parallel Scavenger의 약자입니다.
- 첫 번째 숫자 집합은 젊은 세대의 이전/후 크기이고 두 번째 집합은 전체 힙에 대한 것입니다(가비지 컬렉션 문제에 대한 자세한 형식은 진단).
- 이름은 해당 생성 및 수집기를 나타냅니다. 두 번째 세트는 힙 전체에 대한 것입니다.
관련된 풀 GC의 예에서는 오래된 세대와 영속적인 세대에 사용되는 컬렉터도 보여 줍니다.
3.757: [Full GC [PSYoungGen: 2672K->0K(35584K)]
[ParOldGen: 3225K->5735K(43712K)] 5898K->5735K(79296K)
[PSPermGen: 13533K->13516K(27584K)], 0.0860402 secs]
마지막으로 로그 출력 예의 한 줄을 분류합니다.
8109.128: [GC [PSYoungGen: 109884K->14201K(139904K)] 691015K->595332K(1119040K), 0.0454530 secs]
- GC 전 107 Mb, GC 후 14 Mb, 최대 젊은 세대 크기 137 Mb
- GC 이전 675Mb 힙, GC 이후 581Mb 힙, 최대 1Gb 힙 크기
- 마이너 GC는 JVM 시작 후8109.128초 경과하여 0.04초가 소요되었습니다.
그 대부분은 GC 튜닝가이드(어쨌든 읽는 것이 좋습니다)에 설명되어 있습니다.
명령줄 옵션
-verbose:gc
를 지정하면 각 컬렉션에서 힙 및 가비지 컬렉션에 대한 정보가 출력됩니다.예를 들어, 대규모 서버 애플리케이션의 출력을 다음에 나타냅니다.[GC 325407K->83000K(776768K), 0.2300771 secs] [GC 325816K->83372K(776768K), 0.2454258 secs] [Full GC 267628K->83769K(776768K), 1.8479984 secs]
여기에서는 2개의 마이너 컬렉션과 1개의 메이저 컬렉션을 볼 수 있습니다.화살표 앞과 뒤의 숫자(예:
325407K->83000K
첫 번째 줄부터)는 가비지 수집 전과 후의 활성 개체의 크기를 각각 나타냅니다.부차 수집 후 크기에 가비지(더 이상 활성 상태가 아님)하지만 회수할 수 없는 일부 개체가 포함됩니다.이러한 개체는 테넌트 세대에 포함되거나 테넌트 세대 또는 영구 세대에서 참조됩니다.괄호 안의 다음 숫자(예:
(776768K)
again from the first line)은 힙의 커밋된 크기입니다.즉, 운영체제시스템에 메모리를 추가하지 않고 Java 오브젝트에 사용할 수 있는 공간의 양입니다.한 번에 하나의 생존자 공간만 사용할 수 있으므로 이 숫자에는 생존자 공간 중 하나가 포함되지 않으며 가상 시스템에서 사용하는 메타데이터를 저장하는 영구 생성도 포함되지 않습니다.라인의 마지막 항목(예:
0.2300771 secs
)는 수집을 실행하는 데 걸리는 시간을 나타냅니다.이 경우 약 4분의 1초입니다.세 번째 줄의 줄자 컬렉션 형식은 비슷합니다.
에 의해 생성되는 출력 형식
-verbose:gc
는 향후 릴리즈에서 변경될 수 있습니다.
왜 PHYoungGen이 들어있는지 모르겠는데, 쓰레기 수거기를 바꿨나요?
자세한 GC로그를 입수할 수 있습니다.
-XX:+PrintGCDetails
파라미터를 지정합니다.그러면 답변과 같이 PSYoungGen 또는 PSPermGen 출력이 표시됩니다.
또한.-Xloggc:gc.log
같은 출력을 생성하는 것 같습니다.-verbose:gc
단, 첫 번째 출력 파일을 지정할 수 있습니다.
사용 예:
java -Xloggc:./memory.log -XX:+PrintGCDetails Memory
데이터를 더 잘 시각화하려면 gcviewer를 사용해 보십시오(더 최신 버전은 github에서 확인할 수 있습니다).
파라미터를 올바르게 기입할 수 있도록 주의해 주세요.「+」를 잊어버려서, 에러 메세지가 표시되지 않으면 JBoss가 기동하지 않습니다.
언급URL : https://stackoverflow.com/questions/895444/java-garbage-collection-log-messages
'source' 카테고리의 다른 글
cURL 에러(7): 호스트에 접속할 수 없었습니다. (0) | 2022.09.20 |
---|---|
PHP 5 엄격한 표준 사용 안 함 오류 (0) | 2022.09.19 |
플래터 앱의 크기가 너무 큽니다. (0) | 2022.09.19 |
mysql 서버 포트 번호 (0) | 2022.09.19 |
XAMPP에서 MariaDB를 v10.3으로 업그레이드하는 방법 (0) | 2022.09.19 |