スレッドが予定より遅れており、スレッド ダンプを見ると、ログ出力をハード ディスクに書き込む IO をすべてブロックしていることがわかります。私の簡単な解決策は、ロギングを減らすことです。これは、私の QA 要件に関して十分に簡単に行うことができます。もちろん、これは垂直方向にスケーラブルではなく、すぐに問題になるでしょう。
スレッド数を増やすことだけを考えましたが、ボトルネックはファイルの競合にあると推測しており、これが間違っている場合はかなり悪い可能性があります。
たくさんのアイデアがありますが、どれが実りあるものか本当にわかりません。
- スレッド数を増やすことを考えましたが、ボトルネックになっていると思いますので、これは何もしません。これは正しいです?それを決定する方法は?スレッド数を減らすことは役に立ちますか?
- ディスクに書き込む適切なスレッド数をプロファイリングするにはどうすればよいですか? これは、書き込み要求の数、1 秒あたりの書き込みバイト数、書き込み操作あたりのバイト数、その他の関数ですか?
- 下位レベルの設定 (ファイルシステム、OS など) を切り替えて、ファイルのロックを減らして、行の順序が乱れる可能性を減らすことはできますか? 私のJavaアプリケーションまたは下位レベルのどちらで?
- システムまたはハード ディスクをプロファイリングして、過負荷になっていないことを確認できますか? (漠然としていますが、ここでは自分のドメインから外れています)。
だから私の質問は、共通ファイルに安全に書き込むことができるスレッドの適切な数を決定するためにプロファイリングする方法ですか? これを決定する変数 - 書き込み操作の数、1 秒あたりの書き込みバイト数、書き込み要求ごとのバイト数、OS またはハードディスクの情報。
また、ログ ファイルをより自由に書き込みできるようにする方法はありますか? すべてにタイムスタンプを付けるので、ブロックが減るのであれば、少数の乱れた行があっても問題ありません。