
- JVM Process Down
- OutOfMemory Error
- Slow Response
- JVM Hang
- 과부하
- Java Core Dump를 생성하며 JVM Process 중지
- JDK Bug로 인한 Process Down
- Native Library(JNI) 충돌로 인한 Process Down
# # A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc=0x00007fb21e88337a, pid=15230, tid=140402991798016 # # JRE version: 7.0_09-b05 # Java VM: Java HotSpot(TM) 64-Bit Server VM (23.5-b02 mixed mode linux-amd64 compressed oops) # Problematic frame: # C [ShortestPathFinder.dll+0x1137a] CXiNetworkData::GetNearestNodeID(double, double, bool)+0x1bc # # Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again # # If you would like to submit a bug report, please visit: # http://bugreport.sun.com/bugreport/crash.jsp # The crash happened outside the Java Virtual Machine in native code. # See problematic frame for where to report the bug. # # Stack: [0x00007fd051f6e000,0x00007fd05206f000], sp=0x00007fd052069988, free space=1006k Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) C [libEdgeDbJni.so.0.1+0x1ce3e] Java_com_klmatrix_edgedb_clientlib_EdgeDbCtx_create_1ctx+0x18dae
- OOM 에러로 기본적인 내용 분석
- 어플리케이션에서 잘못된 코드로 인한 불필요한 메모리 사용
- Database에서 많은 데이터 조회(로딩)
- OOM 분석 툴을 이용하여 메모리 분석 : Eclipse Mat, IBM Heap Analyzer
Backend시스템 문제 발생
- Database 응답 지연
- 기타 연동 시스템 이슈 발생
Was Resource 부족
- Thread 부족
- Datasource 부족
OS Resource 부족
- CPU, Memory, Disk 등
- 장애 현상에 대한 원인 및 내용 확인
- 장애 발생 전 작업 내역 확인
- CPU, Memory, Network, Disk 상태 확인
- top, sar, free, vmstat, netstat, …
- WAS 프로세스 상태 확인
- Java Thread Stack
- Heap Dump
- Thread 상태 확인
- Thread 별 CPU 사용률
- Network Connection 상태
- WEB 서버 상태 확인
- WAS 서버와의 연동 모듈 확인
- Network Connection 상태 확인
- 로그 확인
- WAS 로그
- WEB 로그
- OS 로그
- 기타 연동 시스템 로그
- 전체/일부 서비스의 응답 지연 여부 확인
- 웹서버 연동시 웹서버와 연결시 동일 증상 확인
- 병목 구간 확인
- WEB <-> WAS
- Application
- DB
- Application 레벨은 APM 사용
- 주요 원인
- SQL Slow Query
- Database Connection Pool
- NFS
- 어플리케이션 알고리즘
- JVM 메모리 설정에 따른 GC
- 메모리 부족으로 인한 SWAP
- 연동 어플리케이션의 응답지연
- 사용자 폭주로 인한 기대 용량 초과
- OutOfMemory Error Heap 메모리 부족이외에도 여러가지 이유로 발생
- Java Heap Space
- 일시적인 메모리 부족 또는 메모리 누수
- GC 로그 패턴 확인
- 메모리 누수의 경우 지속적으로 Heap Dump 분석
- PermGen or MetaSpace
- PermGen(1.8 이전), MetaSpace(1.8 이후) 메모리 부족
- Requested byte for . Out Of swap space
- Native Heap 메모리가 부족할 때 발생.
- OS 의 Physical Memory 를 증설.
- JNI의 메모리 누수 확인
- Unable to create new native thread
- OS Thread 개수 제한으로 발생
- OS Thread 개수 제한 설정
- /etc/security/limit.conf : nproc
Thread Dump
응답시간 지연, Hang 발생시 수집
Java Thread Stack Snapshot
kill -3
jstack
지속적으로 Thread Dump 를 확인하여 원인 확인
- 예) 3초간격으로 5번 실행 (nohup 표준 출력 로그에서 확인)
Thread Dump 분석툴
- Tdv(thread dump viewer)
- fastthread.io
Heap Dump
- Java 옵션 “HeapDumpOnOutOfMemoryError” 설정시 OOM이 발생하면 자동으로 생성
- 메모리 누수가 의심될 경우 지속적인 Heap Dump 분석 필요
- Heap Dump 생성시 JVM Hang이 발생
- jmap -dump:format=b,file=heapdump.hprof
- Heap Dump 분석툴
- Eclipse Mat
- IBM Heap Analyzer
- HPJmeter
- 응답시간이 지연되는 SQL query 를 생성하고 Thread Dump 를 확인
- kill -3 또는 dump.sh 실행