-
Notifications
You must be signed in to change notification settings - Fork 0
JVM Troubleshooting
정명주(myeongju.jung) edited this page Sep 2, 2019
·
1 revision
$ kill -3 [pid] > [filename]
$ jstack [pid] > [filename]
- 쓰레드덤프는 최소 3번 이상 뜬다.
- 쓰레드덤프는 장애 시 뜬다.
- 쓰레드 단면 생성 시간 정보
- JVM에 대한 정보
- 각 쓰레드의 스텍을 포함한 다양한 정보
- Deadlock에 대한 정보
- 힙 영역의 사용 현황 (JDK 6~)
쓰레드 상태 | 설명 | 비고 |
---|---|---|
NEW | 쓰레드가 아직 시작되지 않은 상태 | |
RUNNABLE | 쓰레드가 수행중인 상태 | 주장애요소 |
BLOCKED | 쓰레드가 잠겨 있어 풀리기를 기다리는 상태 | 주장애요소 |
WAITING | 다른 쓰레드가 특정 작업을 수행하여 깨울 때까지 무한정 기다리는 상태 | |
TIMED_WAITING | 다른 쓰레드가 특정 작업ㅇ르 수행하여 깨울 때까지 지정된 시간만큼 기다리고 있는 상태 | |
TERMINATED | 쓰레드가 종료된 상태 |
툴은 Thread Logic추천
- 다양한 원인이 있음
- 주로 memory leak 나 너무 큰 메모리를 요구하는 경우
- 코드 영역이기 때문에 늘리는게 답
-XX:MaxPermSize
- 배열이 너무 클 시
- OS 메모리 부족 시
- JNI나 Native 코드에서 메모리 할당 오류가 생길 때 발생
- hs_err_xxx 라는 Fatal 에러 로그가 발생하면서 죽는 경우.
- 반드시 메모리 문제만으로 이러한 장애가 발생하는 것은 아님
- 해당 에러 로그 분석 방법은 Troubleshooting Guide for Java SE 6 with HotSpotVM Or “자바 트러블 슈팅 가이드” 참조.
vmstat 명령어 처럼 JVM의 메모리 사용량을 확인하는 명령어
$JAVA_HOME/bin 에 존재
jstat -gcutil [pid] 1s
: 1초당 Java 메모리 상태 확인
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
...
ex) YG 영역이 정상인지 비정상인 지는 GC 이후에 60% 이하라면 괜찮다고 판단
jstat -gccapacity [pid]
: kb 단위로 java 메모리 상태 확인
MGCNM NGCMX NGC S0C S1C EC OGCNM OGCMX OGC OC PGCNM PGCMX PGC PC YGC FGC
...
jmap -dump:format=b,file=[filename.hprof] [pid]
jmap으로 실패할 시
- gcore 생성:
gcore –o [filename] [pid]
- gcore를 힙덤프로 변환:
jmap –dump:format=b,file=[filename] [javabin위치] [gorefilename]
- MAT (Eclipse Memory Analyzer): https://eclipse.org/mat/ : 추천(무료)
- IBM Heap Analyzer : 추천(상용?)
자바 옵션을 추가하는 것 만으로 OOME가 발생했을 때 자동으로 덤프 생성 가능
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=[path]
- vmstat
- sar: 통계 정보
- top: 실시간
vmstat 1 5
- ps
- pstree
- pmap
- df
df -kh
- du
-
du --max-depth=2 /run
: /run 이라는 디렉토리 사용량 확인
-
- iostat
iostat -x
iostat -xd
- lsof
-
lsof | grep [pid]
: 해당 PID가 쓰고 있는 파일명을 알 수 있음
-
JAVA
JPA
- JPA-Create-And-Update
- Optional-Eager
- QueryDsl-Configuration
- QueryDsl-More-Type-safety
- QueryDsl-SubQuery
DDD
Install
Spring
Spring-Boot
- Swagger2-Configuration
- Spring-Restdocs-Configuration
- Spring-Page-Jackson
- JSR310-Guide
- logback-spring.xml
- WebMvcUtils.java
- Spring-Boot-Properties
- Spring-Boot-Hidden-Gems
- Spring-Boot-Config
Spring-Cloud
- Spring-Cloud-Zuul
- Spring-Cloud-Feign
- Spring-Cloud-Hystrix
- Spring-Cloud-Consul
- Spring-Cloud-Ribbon
- Spring-Cloud-Circuit-Breaker
JavaScript
Gradle
Test
Linux
Etc
TODO http://zoltanaltfatter.com/2017/06/09/publishing-domain-events-from-aggregate-roots/