도서 목차
“JVM Internal 파헤치기”
1. JVM 메모리 구조
1.1 JVM이란? ㆍㆍㆍㆍㆍㆍㆍ 16
1.2 Java Heap ㆍㆍㆍㆍㆍㆍㆍ 19
1) Hotspot JVM의 Heap 구조
2) IBM JVM의 Heap 구조
2. Garbage Collection
2.1 GC 소개 ㆍㆍㆍㆍㆍㆍㆍ 25
1) GC 개요
2) GC로 인한 문제점
3) Root Set과 Garbage
4) Garbage Collection 목적
2.2 Hotspot JVM의 Garbage Collection ㆍㆍㆍㆍㆍㆍㆍ 29
1) 개요
2) GC 대상 및 범위
3) GC 관련 옵션들
4) Garbage Collector 종류
2.3 IBM JVM의 Garbage Collection ㆍㆍㆍㆍㆍㆍㆍ 53
1) Garbage Collection 단계
2) Garbage Collector 종류
3) IBM JVM 환경의 Memory Leak 유형
4) 결론
2.4 GC 튜닝 ㆍㆍㆍㆍㆍㆍㆍ 69
1) GC 튜닝 필요성
2) GC 튜닝 목적
3) Object 수 최소화의 중요성(Between Eden and Old Area)
4) Full GC Time 줄이기
5) GC의 성능을 결정하는 옵션
6) GC 튜닝 과정
7) 일반적으로 GC 튜닝이 불필요 한 상황
8) GC 방식 선택
9) Memory 크기와 GC 상관 관계
2.5 GC 성능 테스트 ㆍㆍㆍㆍㆍㆍㆍ 74
1) 개요
2) Case 1
3) Case 2 / Case 2-1
4) Case 3
5) Case 4
6) 결론
2.6 GC 관련 장애 발생 유형(OOME) 및 분석 방법 ㆍㆍㆍㆍㆍㆍㆍ 91
1) OOME의 종류
2) OOME 발생 원인 및 해결 방법
3) OOME 분석 툴
3. JVM Sychronization이란?
3.1 개요 ㆍㆍㆍㆍㆍㆍㆍ 94
1) Java 그리고 Thread
2) Thread 동기화
3) Mutual Exclusion과 Critical Section
4) Monitor
3.2 Java의 동기화(Synchronization) 방법 ㆍㆍㆍㆍㆍㆍㆍ 96
1) Synchronized Statement
2) synchronized Method
3) Wait And Notify
4) synchronized Statement와 synchronized Method 사용
3.3 Thread 상태 ㆍㆍㆍㆍㆍㆍㆍ 101
3.4 Thread의 종류 ㆍㆍㆍㆍㆍㆍㆍ 102
3.5 JVM에서의 대기 현상 분석 ㆍㆍㆍㆍㆍㆍㆍ 102
3.6 Thread Dump 104
3.7 Case별 synchronized에 대한 Thread Dump 분석 ㆍㆍㆍㆍㆍㆍㆍ 105
1) 동기화 방식별 소스 코드
2) Hot Spot JVM 실행 분석
3) IBM JVM 실행 분석
3.8 Thread Dump를 통한 Thread 동기화 문제 해결의 실 사례 ㆍㆍㆍㆍㆍㆍㆍ 113
“도구(Tool)를 이용한 성능분석”
1. Java 성능분석 도구 개요
1.1 JDK 내장 성능분석 도구 ㆍㆍㆍㆍㆍㆍㆍ 118
1.2 3rd Party 성능분석 도구 ㆍㆍㆍㆍㆍㆍㆍ 120
2. JVM Thread, 메모리 정보
2.1 Thread Dump와 Stack Trace 정보 ㆍㆍㆍㆍㆍㆍㆍ 123
2.2 Heap 메모리 구조 ㆍㆍㆍㆍㆍㆍㆍ 124
2.3 Heap Dump 정보 ㆍㆍㆍㆍㆍㆍㆍ 126
2.4 객체 참조, GC와 메모리 누수 ㆍㆍㆍㆍㆍㆍㆍ 128
3. jcmd
3.1 jcmd를 이용하여 Java 프로세스 정보 확인하기 ㆍㆍㆍㆍㆍㆍㆍ 129
3.2 Java Flight Recording 기능 사용하기 ㆍㆍㆍㆍㆍㆍㆍ 134
3.3 GC 메모리 분석 기능 사용하기 ㆍㆍㆍㆍㆍㆍㆍ 146
3.4 Management Agent(JMX) 기능 사용하기 ㆍㆍㆍㆍㆍㆍㆍ 149
3.5 jcmd 도구 vs 다른 도구 비교 ㆍㆍㆍㆍㆍㆍㆍ 152
4. Java Mission Control 도구의 활용
4.1 실시간 모니터링 ㆍㆍㆍㆍㆍㆍㆍ 154
4.2 Java Flight Recorder 레코딩하기 ㆍㆍㆍㆍㆍㆍㆍ 161
4.3 General 정보 ㆍㆍㆍㆍㆍㆍㆍ 164
4.4 Memory 정보 ㆍㆍㆍㆍㆍㆍㆍ 168
4.5 Code 정보 ㆍㆍㆍㆍㆍㆍㆍ 176
4.6 Threads 정보 보기 ㆍㆍㆍㆍㆍㆍㆍ 177
4.7 IO 정보 보기 ㆍㆍㆍㆍㆍㆍㆍ 181
4.8 System 정보 보기 ㆍㆍㆍㆍㆍㆍㆍ 182
4.9 Events 정보 보기 ㆍㆍㆍㆍㆍㆍㆍ 184
5. JConsole ㆍㆍㆍㆍㆍㆍㆍ 188
6. VisualVM
6.1 Monitor 탭 ㆍㆍㆍㆍㆍㆍㆍ 195
6.2 Heap Dump 내용 보기 ㆍㆍㆍㆍㆍㆍㆍ 195
6.3 Threads 탭 ㆍㆍㆍㆍㆍㆍㆍ 197
6.4 Profiler 수행하기 ㆍㆍㆍㆍㆍㆍㆍ 200
6.5 Sampler 수행하기 ㆍㆍㆍㆍㆍㆍㆍ 201
6.6 MBeans Plugin으로 JMX 모니터링하기 ㆍㆍㆍㆍㆍㆍㆍ 202
6.7 Visual GC Plugin 기능 덧입기 ㆍㆍㆍㆍㆍㆍㆍ 205
6.8 JConsole Plugin기능을 VisualVM에서 사용하기 ㆍㆍㆍㆍㆍㆍㆍ 206
7. Eclipse Memory Analyzer (MAT)
7.1 MAT 설치하기 ㆍㆍㆍㆍㆍㆍㆍ 209
7.2 HeapDump 분석 방법 ㆍㆍㆍㆍㆍㆍㆍ 212
7.3 HeapDump 파일 열기 ㆍㆍㆍㆍㆍㆍㆍ 214
7.4 객체 참조관계 분석 ㆍㆍㆍㆍㆍㆍㆍ 215
7.5 ClassLoader 누수 분석 (PermGen이슈) ㆍㆍㆍㆍㆍㆍㆍ 224
7.6 객체를 사용하는 Thread 분석 ㆍㆍㆍㆍㆍㆍㆍ 224
7.7 Collection 분석 ㆍㆍㆍㆍㆍㆍㆍ 225
7.8 Dominator Tree 분석 ㆍㆍㆍㆍㆍㆍㆍ 227
7.9 Leak Suspects 분석 ㆍㆍㆍㆍㆍㆍㆍ 229
7.10 Heap Dump 파일 비교 분석 ㆍㆍㆍㆍㆍㆍㆍ 237
8. IBM HeapAnalyzer
8.1 IBM HeapAnalyzer 사용되는 용어 정의 ㆍㆍㆍㆍㆍㆍㆍ 241
8.2 Summary ㆍㆍㆍㆍㆍㆍㆍ 242
8.3 Leak Suspect ㆍㆍㆍㆍㆍㆍㆍ 243
8.4 Object List ㆍㆍㆍㆍㆍㆍㆍ 247
8.5 Type List ㆍㆍㆍㆍㆍㆍㆍ 248
8.6 Root List / Root Type List ㆍㆍㆍㆍㆍㆍㆍ 249
8.7 Gaps by Size/ Gap Statistics ㆍㆍㆍㆍㆍㆍㆍ 250
9. Java Thread Dump Analyzer(TDA)
9.1 TDA 사용하기 ㆍㆍㆍㆍㆍㆍㆍ 253
9.2 TDA를 이용한 분석 ㆍㆍㆍㆍㆍㆍㆍ 256
10. 성능분석 도구들 비교 ㆍㆍㆍㆍㆍㆍㆍ 261
“APM(InterMax) 활용 성능 분석 사례”
1. InterMax란 무엇인가?
1.1 실시간 모니터링 ㆍㆍㆍㆍㆍㆍㆍ 264
1.2 사후 분석 ㆍㆍㆍㆍㆍㆍㆍ 272
1.3 트랜잭션 조회 ㆍㆍㆍㆍㆍㆍㆍ 278
2. 성능 분석 사례
2.1 과도한 SQL Fetch에 의한 OOME 발생 사례 ㆍㆍㆍㆍㆍㆍㆍ 283
2.2 Full GC 수행에 따른 애플리케이션 수행 지연 발생 사례 ㆍㆍㆍㆍㆍㆍㆍ 287
2.3 특정 오브젝트의 메모리 과다 사용으로 인한 OOME 발생 사례 ㆍㆍㆍㆍㆍㆍㆍ 291
2.4 소켓 타임아웃에 의한 서비스 지연 발생 사례 ㆍㆍㆍㆍㆍㆍㆍ 294
2.5 Exception이 발생하며 서비스 수행에 실패하는 사례 ㆍㆍㆍㆍㆍㆍㆍ 298
2.6 SQL 수행 지연에 따른 애플리케이션 지연 현상 분석 사례 ㆍㆍㆍㆍㆍㆍㆍ 300
2.7 DB Lock에 의한 애플리케이션 지연 현상 분석 사례 ㆍㆍㆍㆍㆍㆍㆍ 304