すべてのスレッドがFUTEX_WAIT_PRIVATE
状態でランダムにハングするプロダクション環境で実行されているマルチスレッドアプリケーションがあり、gdbはすべてのスレッドがロック呼び出しを試みていることを示しますPyThread_acquire_lock
。これは何万行ものコード行を伴う大規模なアプリケーションであり、このエラーがどの行で発生したのかわかりません。 この問題を何とかデバッグできますか?私はスレッドをパッチすることができます。呼び出しをロックし、すべてのロックをファイルにロックし、アプリケーションで解放/解放し、エラーが発生した場合にこのファイルを読み込みますが、他のPython関数がPyThread_acquire_lock
を呼び出すと思います。どうすれば問題をデバッグできますか?おそらく、このC関数呼び出しをPythonから「購読」してこれらの呼び出しをすべて記録することは可能でしょうか?デバッグPyThread_acquire_lockデッドロック
4
A
答えて
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
関連する問題
- 1. SQL Server 2000 - デッドロックのデバッグ
- 2. デッドロックをデバッグするには?
- 3. Amazon RDSのMySQLデッドロックのデバッグ
- 4. デッドロック
- 5. C#MS-SQL 2012のデッドロックのデッドロック
- 6. pthread_cond_signalデッドロック
- 7. NSManagedObjectContextデッドロック
- 8. __syncthreads()デッドロック
- 9. NSConditionデッドロック
- 10. postgresqlデッドロック
- 11. ベーカリーアルゴリズム(デッドロック?)
- 12. existingObjectWithID NSPrivateQueueConcurrencyTypeのデッドロック
- 13. デッドロックの作成
- 14. sqlalchemy + mysqlデッドロック
- 15. ゴルーチン間のデッドロック
- 16. MongoDb Upsertデッドロック
- 17. Azure/Xamarin - SyncContext.InitializeAsyncデッドロック
- 18. NSManagedObjectContext - FetchRequestデッドロック
- 19. スレッドのデッドロックjava
- 20. カスタムLinkedBlockingQueueデッドロック
- 21. マルチスレッドとデッドロック
- 22. TcpClient例外デッドロック
- 23. デッドロックの履歴
- 24. System.Diagnostic.Processのデッドロック
- 25. MTSレプリケーションのデッドロック
- 26. j2meネットワーキング、スレッド、デッドロック
- 27. Scalaのデッドロック
- 28. スレッドセーフキューのデッドロック
- 29. エアフローSubDagOperatorデッドロック
- 30. フェイルオーバーロードバランサのデッドロック
は、それが良い音と、再びこのバグをキャッチしたときに、私はこれを試してみますありがとうございます! – skavans