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을 통해 각 스레드의 상태와 대기 중인 리소스를 확인할 수 있다.