Linux

pstack

진공청소ㄱl 2025. 3. 26. 17:19

 pstack


Linux/Unix 환경에서 실행 중인 프로세스의 스택 트레이스를 확인할 수 있는 디버깅 도구이다. 프로세스가 현재 어떤 함수를 실행 중이며, 어떤 경로로 해당 함수가 호출되었는지 추적할 수 있다.

 

설치

yum install gdb

 

기본 사용법

# 기본 문법
pstack [프로세스ID]

# 예시
pstack 1234

 

사용 사례


 

프로세스 행(Hang) 분석

$ pstack 1523
Thread 1 (Thread 0x7f123456789):
#0 0x00007f1234567890 in calculate_hash () at hash.cpp:123
#1 0x00007f1234567891 in process_data () at process.cpp:456
#2 0x00007f1234567892 in infinite_loop () at main.cpp:789

 

프로세스가 응답하지 않거나 멈춘 것처럼 보일 때 pstack을 사용하면 현재 실행 중인 함수와 호출 스택을 확인할 수 있다.

 

데드락(Deadlock)

$ pstack 1523
Thread 1 (Thread 0x7f2b83c7b700):
#0 0x00007f2b82c3a1bd in pthread_mutex_lock()
#1 0x00000000004b2c1f in LockManager::acquireLock()
#2 0x00000000004b1d8b in Transaction::waitForResource()
#3 0x00000000004b1a25 in ResourceA::lock()
- 리소스 B 대기 중

Thread 2 (Thread 0x7f2b83c7c800):
#0 0x00007f2b82c3a1bd in pthread_mutex_lock()
#1 0x00000000004b2c1f in LockManager::acquireLock()
#2 0x00000000004b1d8b in Transaction::waitForResource()
#3 0x00000000004b1a25 in ResourceB::lock()
- 리소스 A 대기 중

 

여러 스레드가 서로의 리소스를 기다리며 교착 상태에 빠졌을 때, pstack을 통해 각 스레드의 상태와 대기 중인 리소스를 확인할 수 있다.