2

本番環境で Python デーモンを実行しています。7 ~ 120 のスレッドを使用します。最近、最小のインスタンス (7 スレッド) がハングを示し始めましたが、他のすべてのインスタンスはこの種の問題を示しませんでした。strace を Python プロセスにアタッチすると、すべてのスレッドが futex FUTEX_WAIT_PRIVATE を呼び出していることがわかります。そのため、おそらく何かをロックしようとしています。

このような問題をどのようにデバッグしますか?

これはフラッシュ メモリから実行される実稼働システムであるため、ディスクへの書き込みも制限されることに注意してください。

4

2 に答える 2

4

観察は少し間違っていました。1 つのスレッドは futex を呼び出していませんでしたが、代わりにギルを保持しながらスワップしていました。問題のマシンはハードウェアが少ないため、このスワッピングには非常に時間がかかり、デッドロックのように見えました。根本的な問題は、メモリ リークです。:-(

于 2010-10-12T09:07:58.707 に答える
2

親愛なる Helmut、FUTEXT_WAIT_PRIVATE で 1 つのスレッドがハングするという同じ問題があります。

問題を解決したようです。ソリューションに関する詳細情報を共有できますか?

更新:

ロックの理由が最終的に発見されました (少なくとも私の場合): Python でのインポート ロックが原因でした。

次の状況を考慮してください。

file1.py:

インポートファイル2

file2.py:

スレッド「thread2」を作成

「スレッド2」を実行

「thread2」が何らかの関数で終了するまで待ちます(go Go()としましょう)

デフゴー():

some_module をインポート

....

ここで、Go() のインポートがハングアップします。これは、インポートが (インポート file2 によって) メイン スレッドでロックされているためです。これは、Go() が終了するまで解放されません。FUTEX_WAIT_PRIVATE で strace ハングが発生します。

この問題を回避するには、file2 のインポート中に実行されたコードを Do() 関数に配置し、file2 のインポート後に実行します。

インポートファイル2

file2.Do()

于 2010-12-26T13:25:41.327 に答える