
これについてあまり情報が見つからないので、ここで質問します...
IO サブシステム ワーカー構成の「Io スレッド」と「タスク最大スレッド」の設定の主な用途は何ですか?
私が読んだところすべてにおいて、「Io スレッド」はサーバーが処理できる同時要求の数を指定し、「タスク最大スレッド」はサーバーが処理できる同時要求の最大数であると述べられています。
つまり、「Io スレッド」を 50 に設定すると、JBoss は 50 のブラウザ要求を同時に処理できるということですか?
私のサイトでは、15 秒以内に 1500 人の同時ユーザーにサービスを提供できる必要があります。また、各リクエストの完了には 3 秒以上かかることはありません。これには、ブラウザーに必要な HTML、JS、CSS、およびすべての jpg ファイルのダウンロードが含まれます。
これは、「Io スレッド」を 100 などの大きな数値に設定し、「タスク最大スレッド」を 150 に設定する必要があることを意味しますか?
「タスク最大スレッド」を 150 や 250 に設定してみましたが、サイトの速度が低下するようです。
これら 2 つの設定がどのように機能するかを説明できる人はいますか?
答え1
通常、ユーザー接続ごとに個別の IO スレッドを用意する必要はありません。ただし、速度低下を回避するために、同時ユーザーと同じ数のタスク スレッドが必要になる場合があります。デフォルトを試して、アプリケーションでどのように機能するかを確認できます。次のサポート記事を参照してください。
EAP 7.2 には効率化のための追加のコア スレッド構成があることに注意してください。
更新:より包括的な説明が必要な場合は、完全なRed Hat Enterprise Application Platform パフォーマンスチューニングガイド。
アップデート2: EAP 7はUndertowを使用しているため、IOとワーカースレッドが何をするのかを理解するために、アンダートウ ドキュメントいくつかの手がかりを与えるはずです:
IO およびワーカースレッドの管理
XNIO ワーカーは、IO スレッドと、ブロッキング タスクに使用できるスレッド プールの両方を管理します。一般に、非ブロッキング ハンドラーは IO スレッド内から実行され、サーブレット呼び出しなどのブロッキング タスクはワーカー スレッド プールにディスパッチされます。
答え2
@IWantSimpleLife @akostadinov が参照したドキュメントでは、設計と「ブロッキング IO」作業がハンドラー作業とどのように分離されているかが説明されています。あなたの質問に対する答えとして、「IO スレッド」と「タスク最大スレッド」は直接関連していないと答えるのは正しいと思います。これらは 2 つの別々のスレッド グループを参照しているため、そう言います。1 つ目は「ワーカー IO スレッド」で、これは、nio チャネルとイベントをリッスンする IO 関連の「読み取り」および「書き込み」ハンドラーの初期グループを表します。理想的には、IO プールには 1 つのスレッドのみが必要です。一度もないブロッキング(ネットワークまたはファイル)処理を実行します。他のグループは一般的に「ワーカータスクスレッド」グループと呼ばれます。これは、ブロッキング作業を実行することに専念しています。設定この 2 番目のグループのサイズは「タスク最大スレッド」になります。