현재 시스템에서 실행 중인 Java 프로세스 목록과 각각의 PID를 확인하는 방법
JDK에 포함된 도구로, 자바 프로세스만 골라서 보여줌
jps -v
-v: JVM 인자(포트 번호, 메모리 설정 등)를 함께 보여주어 어떤 서버인지 구분이 쉬움특정 포트(예: 8280)를 사용하는 프로세스가 무엇인지 찾을 때 유용함
# Windows
netstat -ano | findstr :8280
찾아낸 PID를 이용하여 현재 서버 내부에서 어떤 일꾼(Thread)들이 무슨 일을 하고 있는지 확인
jstack <PID>
로그가 길기 때문에 파일로 저장해서 보는 것이 편함
jstack <PID> > thread_dump.txt
추출된 로그에서 우리가 주목해야 할 부분은 다음과 같음
http-nio-<포트>-exec-<번호>: 톰캣의 작업 쓰레드임 http-nio-8280-exec-2 → 8280 포트 서버의 2번 작업자main: 애플리케이션을 기동한 메인 쓰레드C1/C2 CompilerThread: 자바 코드를 최적화하는 JVM 내부 쓰레드| 상태 | 의미 | 비고 |
|---|---|---|
| RUNNABLE | 현재 CPU를 점유하고 로직을 수행 중 | DB 조회나 연산 중일 때 나타남 |
| WAITING (parking) | 할 일이 없어서 쓰레드 풀에서 대기 중 | 평상시 톰캣 쓰레드의 일반적인 상태 |
| BLOCKED | 다른 쓰레드가 자원을 점유하고 있어 대기 중 | 성능 저하의 주범 (교착 상태 확인 필요) |
exec-2 같은 이름이 로그에 찍히면 어떤 포트인지 확인netstat이나 jps로 해당 서버의 PID를 구함jstack <PID>을 실행하여 해당 쓰레드가 RUNNABLE인지 WAITING인지 확인at com.example... 경로를 보고 내 소스 코드의 어느 지점에서 실행 중인지 파악