1

それぞれがデーモンを実行している100台のサーバーがあるとしましょう-それを呼びましょうserver-そのサーバーは、この特定のサービスの各ユーザーのスレッドを生成する責任があります(サーバーごとに1000スレッドとしましょう)。各Nスレッドは毎秒何かを実行し、その特定のユーザーに関する情報を取得します (この要求/応答モデルは変更できません)。私が抱えている問題は、スレッドがハングして何かを停止することがあります。ユーザー データが古く、更新する必要があることを知る方法が必要です。

私が持っている唯一のアイデア5Nは、スレッドがそのユーザーに関連付けられた MySQL レコード ( last_scannedusers テーブルの列) を毎秒更新し、そのテーブルを毎秒チェックする別のプロセスで15N、列が最新でない場合last_scannedはスレッドを再起動することです。

4

1 に答える 1

1

これを処理する一般的な方法は、スレッドがステータスをサーバー デーモンに報告するようにすることです。過去 5N 秒以内にステータスの更新が見られない場合は、スレッドを強制終了して別のスレッドを開始します。

リストでスピンアップした現在アクティブなスレッドを追跡し、時々それらをループして状態を判断できます。

もちろん、スレッドが途中で終了する原因となっているプログラムのエラーも修正する必要があります。

途中で終了してスレッドを強制終了すると、プログラムが予期しない非アトミックな状態になる可能性もあります。また、サーバー デーモンにクリーンアップ プロセスを実行させて、キュー内のアイテムやワークロードを決定するために使用しているものを、一定期間非アクティブになった後にリセットするようにする必要があります。

于 2012-05-03T23:46:20.917 に答える