8

CPU に問題があるトルネード アプリケーションの作業を開始したところです。CPU 時間は時間の経過とともに単調に増加し、CPU は 100% で最大になります。システムは現在、メイン スレッドをブロックしないように設計されています。ブロックする何かを実行する必要があり、非同期ドライバーが使用できない場合は、別のスレッドを生成してブロック操作を実行します。

したがって、ほぼ完全に CPU バウンドのメイン スレッドと、ほぼ完全に IO バウンドの他のスレッドの束があります。私が読んだことから、これは GIL で問題に遭遇する完璧な方法のようです。さらに、私のプロファイリングは、シグナルの待機に多くの時間を費やしていることを示しています (これは、私__semwait_signalが行っていることであると想定しています)。

チェックsys.setcheckinterval間隔を 300 に設定すると、CPU の成長が大幅に遅くなります。私が判断しようとしているのは、チェック間隔を増やすべきか、300 のままにしておくべきか、それとも怖がって増やすべきかということです。結局、CPU のパフォーマンスが向上していることに気付きますが、これがシステムの応答性に悪影響を与えるのではないかと少し心配です。

もちろん、正しい答えはおそらく、GIL を考慮してアーキテクチャを再考する必要があるということです。しかし、それはすぐにできることではありません。では、短期的に取るべき適切な行動方針をどのように決定すればよいのでしょうか?

4

1 に答える 1

1

最初に確認することは、スレッドを適切に終了していることを確認することです。説明だけでは何が起こっているのかを理解するのは非常に困難ですが、「単調」という言葉を使用しています。これは、CPU の使用が負荷ではなく時間に関連付けられていることを意味します。

Python のスレッド制限に達している可能性は十分にありますが、負荷 (アクティブなスレッドの数) によって増減し、スレッドが終了するにつれて CPU 使用率 (コンテキスト切り替えコスト) が減少するはずです。一度作成されたスレッドが永久に存続する理由はありますか? その場合は、その再構築を優先してください。それ以外の場合、短期的には、CPU 使用率が負荷ではなく時間に関連付けられている理由を突き止めることになります。これは、システム内で新しいスレッドごとに永続的で不可逆的なコストが発生することを意味します。つまり、スレッドが終了することはありません。

于 2010-08-25T00:49:52.193 に答える