JVM(Java Virtual Machine)은 성능을 최적화하고 프로덕션 문제를 해결하는 데 유용한 3가지 중요한 아티팩트를 생성합니다. 해당 아티팩트는 다음과 같습니다.

  1. 가비지 컬렉션(GC) 로그
  2. 스레드 덤프
  3. 힙 덤프

1. 쓰레기 수집 로그

a) GC 로그란 무엇입니까?

GC 로그에는 가비지 수집 이벤트 관련 정보가 포함됩니다. 실행된 GC 이벤트 수, 이 명령이 GC 이벤트 명령 유형(예: Young GC 또는 Full GC), 각 GC 이벤트가 애플리케이션을 일시 중지한 시간, 각 GC 이벤트가 회수한 개체의 수를 나타냅니다.

b) GC 로그는 어떻게 생겼습니까?

샘플 가비지 수집 로그 파일은 여기에서 찾을 수 있습니다.

c) GC 로그는 어디에 사용됩니까?

가비지 수집 로그는 애플리케이션의 GC 및 메모리 성능을 연구하는 데 사용됩니다. GC 일시 중지 시간을 최적화하는 데 사용되며 애플리케이션에 대한 최적의 메모리 크기를 식별하는 데 사용되며 메모리 관련 문제를 해결하는 데에도 사용됩니다.

d) GC 로그를 생성하는 방법은 무엇입니까?

다음 JVM 인수를 전달하여 가비지 수집 로그를 생성할 수 있습니다.

Java 버전 8까지:

9부터 시작하는 Java 버전:

file-path: 가비지 컬렉션 로그 파일이 기록될 위치입니다.

e) GC 로그를 이해하는 방법?

Garbage Collection 로그 형식은 JVM 벤더(Oracle, HP, IBM, Azul, ..), Java 버전(1.5, 5, 6, 7, 8, 9, 10, 11, 12,…), 쓰레기에 따라 다릅니다. 수집 알고리즘(직렬, 병렬, CMS, G1, Shenandoah, Z GC) 및 JVM 인수를 전달합니다. 따라서 사용할 수 있는 표준화된 형식이 없습니다. 그러나 여기에 GC 로그 파일 형식을 이해하는 데 도움이 되는 비디오 자습서가 있습니다.

f) GC 로그를 분석하는 데 사용되는 도구는 무엇입니까?

여러 가비지 수집 로그 분석 도구가 있습니다. GCeasy, IBM GC & Memory Visualizer, HP JMeter, Google Garbage Cat과 같은 인기 있는 것들이 있습니다.

2. 스레드 덤프

a) 스레드 덤프란 무엇입니까?

스레드 덤프는 특정 시점에 애플리케이션에서 실행 중인 모든 스레드의 스냅샷입니다. 여기에는 스레드 상태, 스레드 ID, 기본 ID, 스레드 이름, 스택 추적 및 우선 순위와 같은 응용 프로그램의 각 스레드에 대한 모든 정보가 포함됩니다.

b) 스레드 덤프는 어떻게 생겼습니까?

샘플 스레드 덤프는 여기에서 찾을 수 있습니다.

c) 스레드 덤프는 어디에 사용됩니까?

스레드 덤프는 주로 CPU 스파이크, 애플리케이션의 무응답, 느린 응답 시간, 정지된 스레드, 높은 메모리 소비와 같은 프로덕션 문제를 해결하는 데 사용됩니다.

d) 스레드 덤프를 생성하는 방법은 무엇입니까?

스레드 덤프는 8가지 다른 옵션을 사용하여 실행 중인 애플리케이션에서 캡처할 수 있습니다. 스레드 덤프를 가져오는 가장 일반적인 옵션은 ‘jstack’ 도구를 사용하는 것입니다. jstack 도구는 JDK_HOMEbin 폴더에 제공됩니다. 다음은 스레드 덤프를 캡처하기 위해 실행해야 하는 명령입니다.

pid: 스레드 덤프를 캡처해야 하는 응용 프로그램의 프로세스 ID입니다.

file-path: 스레드 덤프가 기록될 파일 경로입니다.

e) 스레드 덤프를 이해하는 방법?

다음은 스레드 덤프를 이해하는 방법에 대한 자세한 개요를 제공하는 비디오 강연입니다.

f) 스레드 덤프를 분석하는 데 사용되는 도구는 무엇입니까?

다음은 가장 널리 사용되는 스레드 덤프 분석 도구입니다. fastThread, Samurai, IBM Thread & Monitor Analyzer, Visual VM

3. 힙 덤프

a) 힙 덤프란 무엇입니까?

힙 덤프는 특정 시점의 애플리케이션 메모리 스냅샷입니다. 여기에는 메모리에 있는 개체가 무엇인지, 개체에 포함된 값, 크기, 참조하는 다른 개체와 같은 정보가 포함됩니다.

b) 힙 덤프는 어떻게 생겼습니까?

샘플 힙 덤프는 여기에서 찾을 수 있습니다. (참고: 바이너리 형식이 될 것이므로 실제로 읽을 수 없습니다).

c) 힙 덤프는 어디에 사용됩니까?

힙 덤프는 주로 메모리 관련 OutOfMemoryError 문제를 해결하는 데 사용됩니다.

d) 힙 덤프를 생성하는 방법은 무엇입니까?

7가지 다른 옵션을 사용하여 실행 중인 애플리케이션에서 힙 덤프를 캡처할 수 있습니다. 힙 덤프를 가져오는 가장 일반적인 옵션은 ‘jmap’ 도구를 사용하는 것입니다. jmap 도구는 JDK_HOMEbin 폴더에 제공됩니다. 캡처를 위해 실행해야 하는 명령은 다음과 같습니다.

pid: 힙 덤프를 캡처해야 하는 Java 프로세스 ID입니다.

file-path: 힙 덤프가 기록될 파일 경로입니다.

e) 힙 덤프를 이해하는 방법?

힙 덤프 파일은 바이너리 형식이며 크기가 큰 경향이 있습니다. 그 외에도 형식에 문서가 많이 부족합니다. 따라서 힙 덤프 분석 도구(다음 질문에서 제공)를 사용하여 이를 분석하고 이해해야 합니다.

f) 힙 덤프를 분석하는 데 사용되는 도구는 무엇입니까?

가장 널리 사용되는 힙 덤프 분석 도구는 Eclipse MAT, HeapHero, JVisualVM입니다.
이 기사가 가비지 수집 로그, 스레드 덤프 및 힙 덤프를 분석하는 방법에 대한 모든 방법을 다루기를 바랍니다. 이 기사가 정말 도움이 되었다면 이 정보를 친구, 친척, 가족 및 다른 사람들과 공유하십시오. 다음 포스팅에서 뵙겠습니다 signalfix.net!