2017-02-10 5 views
4

모든 스레드가 FUTEX_WAIT_PRIVATE 상태 인 임의의 시간에 멈추는 프로덕션 환경에서 실행중인 다중 스레드 응용 프로그램을 가지고 있으며 gdb는 모든 스레드가 잠금 호출을 시도하고 있음을 보여줍니다. PyThread_acquire_lock. 수만 개의 코드 라인을 가진 엄청난 규모의 어플리케이션이며이 에러가 발생한 라인을 추측 할 수 없습니다. 어떻게 든이 문제를 디버깅 할 수 있습니까? 스레딩을 패치 할 수 있습니다. 잠금 호출 및 모든 잠금 파일을 응용 프로그램에서 획득/릴리스하고 오류가 발생했을 때이 파일을 읽었지만 다른 파이썬 함수가 PyThread_acquire_lock이라고 생각합니다. 그렇다면 문제를 어떻게 디버깅 할 수 있습니까? 어쩌면 파이썬에서이 C 함수 호출을 "구독"하고 이러한 모든 호출을 기록 할 수 있습니까?Debug PyThread_acquire_lock deadlock

답변

4

대답에서 한 단계가 있습니다. 교착 상태에있는 프로세스에 gdb을 첨부하고 Python gdb 확장을 사용하여 교착 상태에있는 행을 검사합니다. gdb --version> = 7의 경우

:

sudo apt install python2.7-dbg python3-dbg 
sudo gdb /usr/bin/python[3] <pid_of_deadlocked_process> 
(gdb) thread apply all py-list 
(gdb) thread 2 
(gdb) py-up 
(gdb) py-print <lock_object> 

참고 : https://docs.python.org/devguide/gdb.html, https://wiki.python.org/moin/DebuggingWithGdb

+0

는 좋은 소리 주셔서 감사합니다 나는 때 캐치이 버그 다시 시도합니다! – skavans