본문 바로가기
JAVA & JVM

Java Thread

by 샤워하다돌면워싱턴 2022. 8. 30.
반응형
Thread? 하나의 프로세스 내부에서 독립적으로 실행되는 하나의 작업 단위를 말한다.
두개 이상의 스레드가 같은 자원을 이용할 때는 필연적으로 경합이 발생하고 경우에 따라서 DEADLOCK이 발생할 수도 있다.

스레드 상태
NEW: 스레드가 생성되었지만 아직 실행되지 않은 상태
RUNNABLE: 현재 CPU를 점유하고 작업을 수행 중인 상태. 운영체제의 자원 분배로 인해 WAITING 상태가 될 수도 있다.
BLOCKED: CPU를 점유하기 위해 다른 스레드가 락을 해제하기를 기다리는 상태
WAITING: wait() 메서드, join() 메서드, park() 메서드 등를 이용해 대기하고 있는 상태
TIMED_WAITING: sleep() 메서드, wait() 메서드, join() 메서드, park() 메서드 등을 이용해 대기하고 있는 상태. 
  • WAITING 상태와의 차이점
    : 메서드의 인수로 최대 대기 시간을 명시할 수 있어 외부적인 변화뿐만 아니라 시간에 의해서도 WAITING 상태가 해제될 수 있다는 것.
Thread Dump ??
  • 서비스 진행 중 자바는 스레드를 이용해서 사용하게 되는데 사용자의 요청에 따른 스레드들을 파일형태로 생성되어 그 내용을 볼 수 있음.
  • java was에 문제가 있을때 사용. 
  • Java 어플리케이션의 각 Thread의 CPU 사용율을 확인 방법|
 
Thread Dump를 생성하는 방법
  • ps -ef | grep java ( 자바가 사용하는 프로세스 ID (PID)를 확인 )
  • kill -3 [PID] ( 덤프를 생성하는 명령어 3초간격 3번)
  • jps -v (현재 JVM이 사용하는 PID를 확인)
  • jstack [PID] (덤프를 생성하여 해당 PID의 덤프를 확인 할 수 있다.)
 
Thread Dump 분석이 필요한 경우
1. Hang
  • Java 어플리케이션의 Thread들이 멈춰있는 상황
  • 스레드 덤프를 통해 Thread들이 현재 수행하고 있는 상태를 확인 하여 원인을 파악 할 수 있다.
  • Hang 상태가 발생하는 경우는 다양하며 주요한 원인으로 Object locking, Heap locking등이 있다.
2. Java 어플리케이션의 처리가 늦을 경우(wait for I/O)
  • SQL문 수행의 지연으로 DB에서 데이터를 불러오기 위해 대기하는 상태.
     
  • 어느 stack에서 지연되는지를 확인 가능.
  • Thread들이 sleep단계에서 모두 대기하는 상태.
3. Java 어플리케이션의 CPU 사용률이 높을 경우(특정 Thread가 높을 경우)
  • Thread의 수행 상태와 stack을 확인.
  • Java 어플리케이션의 각 Thread
     
 
스레드 3가지 유형
경합
 : 여러 스레드들을 참조할때 특정 스레드가 큰 점유율을 가지면 나머지 스레드는 웨이팅됨. 
이렇게되면 사용자의 요청을 지연시키게됨. 공용 스레드에 대한 로직 변경이나 소스 수정 필요
 
deadlock 
: 특정 스레드 하나가 문제가 발생되면 나머지 스레드들도 영향을 받는 상황.
데드락 스레드에 대한 내용 스레드 덤프를 실행 - > 데드락이라고 명시되어있음. 
원인은 코딩, was 클래스가 문제일수도 있음. 발생 시 모니터링툴 사용해서 해당요청을 줄일수 있다면 상관없다.
그렇지않으면 재기동해야함
 
wait for I/O : db쪽에 대용량 데이터를 요청할 시 시간이 길어지는 상황. 
공용 스레드가 문제일수도, 데드락 상황 발생 가능, 자주 발생함 소켓 리드에 걸릴수도 있고. 
해결 시 
1.모니터링툴을 이용.
2. 덤프파일 확인후 수행한 클래스 찾아가서 어떤 쿼리를 사용했는지 튜닝필요.
반응형

'JAVA & JVM' 카테고리의 다른 글

Class Loader  (0) 2022.08.30
JAVA Memory Option  (0) 2022.08.30
ParallelGCThreads, ParallelCMSThreads 계산법  (0) 2022.08.30
Garbage Collection Algorithm(가비지 컬렉션 알고리즘)  (0) 2022.08.30
JAVA란?  (0) 2022.08.30

댓글