簡體   English   中英

調試PyThread_acquire_lock死鎖

[英]Debug PyThread_acquire_lock deadlock

我有一個在生產環境中運行的多線程應用程序,隨機時間掛起所有線程的FUTEX_WAIT_PRIVATE狀態,gdb顯示所有線程都試圖鎖定調用PyThread_acquire_lock 這是真正龐大的應用程序與成千上萬的代碼行,我不知道這個錯誤發生在哪一行。 我可以以某種方式調試此問題嗎? 我可以修補threading.Lock調用和登錄文件在應用程序中獲取/釋放所有鎖,然后在再次發生錯誤的情況下讀取此文件,但我認為還有其他python函數調用PyThread_acquire_lock 那我該怎么調試這個問題呢? 也許有可能從Python“訂閱”這個C函數調用並記錄所有這些調用?

您距離答案只有一步:使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM