2017-02-10 5 views
4

すべてのスレッドがFUTEX_WAIT_PRIVATE状態でランダムにハングするプロダクション環境で実行されているマルチスレッドアプリケーションがあり、gdbはすべてのスレッドがロック呼び出しを試みていることを示しますPyThread_acquire_lock。これは何万行ものコード行を伴う大規模なアプリケーションであり、このエラーがどの行で発生したのかわかりません。 この問題を何とかデバッグできますか?私はスレッドをパッチすることができます。呼び出しをロックし、すべてのロックをファイルにロックし、アプリケーションで解放/解放し、エラーが発生した場合にこのファイルを読み込みますが、他のPython関数がPyThread_acquire_lockを呼び出すと思います。どうすれば問題をデバッグできますか?おそらく、このC関数呼び出しをPythonから「購読」してこれらの呼び出しをすべて記録することは可能でしょうか?デバッグPyThread_acquire_lockデッドロック

答えて

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.htmlhttps://wiki.python.org/moin/DebuggingWithGdb

+0

は、それが良い音と、再びこのバグをキャッチしたときに、私はこれを試してみますありがとうございます! – skavans

関連する問題