Java 프로세스 및 쓰레드 분석 가이드

키요·2026년 4월 16일

공부

목록 보기
33/33

1. Java 프로세스 ID(PID) 확인하기

현재 시스템에서 실행 중인 Java 프로세스 목록과 각각의 PID를 확인하는 방법

🔹 jps 명령어 (가장 간단한 방법)

JDK에 포함된 도구로, 자바 프로세스만 골라서 보여줌

jps -v
  • -v: JVM 인자(포트 번호, 메모리 설정 등)를 함께 보여주어 어떤 서버인지 구분이 쉬움

🔹 netstat 명령어 (포트 번호로 찾기)

특정 포트(예: 8280)를 사용하는 프로세스가 무엇인지 찾을 때 유용함

# Windows
netstat -ano | findstr :8280
  • 마지막 열에 나오는 숫자가 해당 서버의 PID

2. 쓰레드 덤프(jstack) 추출하기

찾아낸 PID를 이용하여 현재 서버 내부에서 어떤 일꾼(Thread)들이 무슨 일을 하고 있는지 확인

🔹 기본 실행

jstack <PID>

🔹 파일로 저장하기 (권장)

로그가 길기 때문에 파일로 저장해서 보는 것이 편함

jstack <PID> > thread_dump.txt

3. 쓰레드 로그 읽는 법 (핵심 포인트)

추출된 로그에서 우리가 주목해야 할 부분은 다음과 같음

🔹 이름 규칙 (Thread Name)

  • http-nio-<포트>-exec-<번호>: 톰캣의 작업 쓰레드임
    • 예: http-nio-8280-exec-2 → 8280 포트 서버의 2번 작업자
  • main: 애플리케이션을 기동한 메인 쓰레드
  • C1/C2 CompilerThread: 자바 코드를 최적화하는 JVM 내부 쓰레드

🔹 상태 정보 (Thread State)

상태의미비고
RUNNABLE현재 CPU를 점유하고 로직을 수행 중DB 조회나 연산 중일 때 나타남
WAITING (parking)할 일이 없어서 쓰레드 풀에서 대기 중평상시 톰캣 쓰레드의 일반적인 상태
BLOCKED다른 쓰레드가 자원을 점유하고 있어 대기 중성능 저하의 주범 (교착 상태 확인 필요)

4. 요약: 문제 해결 프로세스

  1. 로그 확인: exec-2 같은 이름이 로그에 찍히면 어떤 포트인지 확인
  2. PID 찾기: netstat이나 jps로 해당 서버의 PID를 구함
  3. 상태 분석: jstack <PID>을 실행하여 해당 쓰레드가 RUNNABLE인지 WAITING인지 확인
  4. 로직 추적: 로그 하단의 at com.example... 경로를 보고 내 소스 코드의 어느 지점에서 실행 중인지 파악
profile
운도 실력

0개의 댓글