티스토리 뷰
1-1. 스레드의 종류
- Daemon Thread
- 작업을 돕는 보조적인 역할을 수행하는 쓰레드 (GC 도 여기에 해당)
- 프로세스 종료시 데몬 쓰레드는 강제적으로 자동종료
- 언제든지 종료가 되어도 상관없는 작업 시에 사용 (그래서 주로 데몬쓰레드를 쓴다)
- Thread t = new Thread(); t.setDaemon(true); 로 설정가능
- Non-Daemon Thread
- 실제 주 작업을 하는 스레드
- 프로세스 종료시 논데몬 쓰레드가 살아있는 경우 종료 불가능 (가끔 톰캣을 종료했지만 안꺼져서 kill 해야되는 이유)
- 매우 중요한 데이터 처리시에 사용하는 것이 일반적
1-2. 스레드덤프를 추출해보면 좋은 상황
- 모든 시스템에 응답이 없을 때
- 사용자 수가 많지 않은데 CPU사용량이 높을때
- 특정어플리케이션 수행 시 응답이 없을때
- 간헐적으로 응답이 느릴때
- 서비스 실행시간이 길어질수록 응답시간이나 cpu 사용량이 늘어날떄 등등
1-3. 멀티스레드 프로그래밍을 안하는데?
java.lang.Thread 를 이용해서 직접 개발하지 않더라도 이미 프레임워크, WAS, 라이브러리에서 내부적으로 사용하고 있다.
만약 라이브러리에서 문제가 생긴다면?? 이럴때 스레드덤프를 쓸 줄 안다면 유용할 것이여~~
2. 스레드덤프 생성하기
- OS단에서
- 리눅스 : kill -3 [PID]
- 윈도우 : Ctrl + Break
- java단에서 (jps -v 로 java 프로세스 확인)
- jstack [PID] (jstack으로 반응이 없는 경우 –F 옵션)
- jcmd [PID] Thread.print (jdk7 이후 등장)
- jcmd [PID] help 로 명령어 확인 가능, 직관적임
- 이때 시간이 있다면 텀을 두고 3~4장을 떠두는게 좋다.
3. 스레드덤프를 읽어보자
- 스레드이름
- lang.Thread 클래스로 생성하면 'Thread-숫자' 형식으로 생성된다.
- DefaultThreadFactory 를 사용하면 pool-숫자-thread-숫자 형식으로 생성된다.
- 하지만 이런 디폴트이름들로 쓰레드가 가득하다면 덤프를 읽기가 매우 힘들다. 멀티스레드 프로그래밍을 직접할 경우, setName을 이용해서 직관적인 스레드명을 써주는게 좋다.
- 우선순위 : 스레드 우선순위 (스펙에서도 안중요하다고 함)
- 스레드 아이디
- 16진수
- tid : 자바레벨 쓰레드ID, 자바프로세스마다 1부터 시작. 겹칠수 있겠다.
- ThreadMXBean과 ThreadInfo 을 이용하여 정보 획득 가능
- nid : 네이티브 쓰레드ID, OS영역이고 유니크함
- ps 명령어를 이용해 cpu 사용율 등도 알 수 있음
- 스레드 상태
- runnable
- blocked
- deadlock
- wait
- 스레드 콜스택
4. 스레드덤프의 각종 도구
4-1. JVisualVM
jdk 설치할 때 같이 설치되므로, 환경변수가 잘 잡혀있다면 jvisualvm 이라고 치면 바로 뜬다.
4-2. TDA
- Thread Dump Analyzer
- 오래되고 jvm 별로 포맷이 달라 안읽히는 경우도 있음
4-3. fastThread 사이트
5. 스레드덤프 뜨는법
1. ps -ef | grep java
2. jps -v
3. jstack pid no > threadump.txt
'6. 리눅스' 카테고리의 다른 글
Thread Dump, Heap Dump 생성 및 분석 방법 (0) | 2019.01.04 |
---|---|
리눅스 서버 60초안에 상황파악하기 (0) | 2019.01.03 |
리눅스 jstack thread_dump 보기시 에러 (0) | 2019.01.03 |
apt-get install 로 설치된 위치찾기 (0) | 2018.12.28 |
GPG 공개키 보내주기 (0) | 2018.12.21 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- [오라클 튜닝] instance 튜닝2
- 테라폼
- MSA
- ORACLE 트러블 슈팅(성능 고도화 원리와 해법!)
- 스토리지 클레스
- 오라클
- (InstantClient) 설치하기(HP-UX)
- startup 에러
- pod 상태
- 설치하기(HP-UX)
- 오라클 인스턴트클라이언트(InstantClient) 설치하기(HP-UX)
- K8s
- 우분투
- 키알리
- 5.4.0.1072
- 튜닝
- 오라클 홈디렉토리 copy 후 startup 에러
- CVE 취약점 점검
- ubuntu
- 코로나19
- Oracle
- [오라클 튜닝] sql 튜닝
- 앤시블
- 버쳐박스
- 여러서버 컨트롤
- 트리이스
- 오라클 트러블 슈팅(성능 고도화 원리와 해법!)
- 커널
- 쿠버네티스
- directory copy 후 startup 에러
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함