性能測定された圧力は、最初はユーザの数が増加する場合、それは特定の閾値の後、ユーザの数はQPSが増加しない、又は有意に増加していないが、要求の応答時間に同時に実質的な増加はない増加QPSを、上昇します。私たちが考えるしきい値は、スレッドの最高数です。
なぜスレッドの最適な数の意味は次のとおりです。
1.あまりにも多くのスレッドは、より多くのCPUのオーバーヘッドをより多くのメモリオーバーヘッドが発生しますが、QPSを強化するためには役立ちません。
2.最高かつ最も安定した出力QPSに、あなたはWebシステムをより安定させることができ、簡単なセットアップをスレッドの最適な数を見つけます
スレッドの最高数を取得します。
図1に示すように、ユーザによって性能を測定された圧力をゆっくり観察QPS、応答時間をインクリメント
2は、式に従って計算される:最適なサーバ・スレッド=(CPU時間の(スレッドのスレッドCPU時間の待ち時間+)/スレッド)*番号CPUの数
図3に示すように、シングルユーザー圧力試験CPU消費量を確認するため、及び、直接パーセンテージによって、次いで通常この値の近傍の圧力試験は、スレッドの最適な数でなければなりません。
スレッドの最適な数に影響を与える主な要因:
1、IO
2、CPU
式によると:最高のサーバスレッド=(CPU時間の(スレッドのスレッドCPU時間の待ち時間+)/スレッド)*数値はCPUの数
これは、一般的にIOとCPUです。時間を待っているより多くのCPUスレッドが長くなり、コスト、そのスレッドの数がより開くことができ、逆に小さくなるようにスレッドの数であるIOアプリケーションが、実際には、両極端、などプロキシとしての純粋なIOアプリケーションの数、スレッドが存在することができますオープン基本的にQPSの数を持っているバックエンド・アプリケーション(このプロキシはプロキシ検索があるなど)である、(あなたがスレッド切り替えのオーバーヘッドを考慮する必要が大きすぎる)、その多くのプロキシ非常に大きいがあります。
もう一つは、このような状況では唯一のCPUの数に一般的にスレッド数をCPUの計算消費開くことができています。しかし、このアプリケーションがQPS、QPSは、多くの場合、このアプリケーションが高くなる可能性が高くないと言うことではありません。
QPSの関係とスレッドの数
1の後、スレッドの最適な数の前に、QPS、互いにスレッドの関係は最高のスレッドにスレッド数を増加して、QPS対応時間は上昇し続けながら、フラット、上昇していない、でも、少し減少。
2、システムの点で同じ、サポートされているスレッドの数(複数のスレッドの最適な数より構成されていないスレッドの数)、より高いQPSより
QPSの関係と応答時間
図1は、一般的な応答時間のためのWebシステムは、CPU実行時間レイテンシ+ IO組成物であります
2、QPSはQPSの実質的なアップグレードのIO時間を短縮する必要があるため、CPUの実行時間を短縮は明らかにされていません。あなたが大幅にQPSを強化したい場合は、システムの最適化時間は、CPUの小虎の最適化に焦点を当てます。
スレッドとの最適な数のJVM のヒープメモリが関係しました:
頻繁FULL GCを発生しないで、これらはCPUでのパフォーマンスのボトルネックに基づいており、Javaアプリケーションのためのもう一つの要因は、我々はスレッドの最適な数を確保するためにFULL GCたいれます
式に従って::(小さな時間間隔GC / RT)*(同時スレッドの数* THM)は、<=、スレッドの<最適数はより頻繁FULL GCをもたらすことができるこの場合、計算若い同時スレッドの数は、現実には思えますWebシステム上で非常に小さいです。しかし、それをシミュレートすることができます。
だから我々は、JBossのスレッドを設定し、彼らは、圧力測定及び計算によってスレッドの最適な数を取得するために着手したメモリ式のスレッド数を利用して、スレッドの数を設定することができます。
スレッド数を設定します。
スレッドの数がスレッド圧力測定<の実際の組の最適数は、<メモリのスレッドの数を制限します
システム自体がされるので、例えば、スレッド番号を介して最高の圧力測定システム10を得るために、その後、スレッドの数は、メモリ20を介して計算される、スレッドの数のために提供され、10であれば直接、15が可能であるJBossの私たちが死んでいるので、彼らの、いくつかは、システムの変更に依存しており、このようなシステムは、IOの応答時間の数に依存しているいくつかの変更が、突然、スレッドの数または10による延長され、実際には、この時間は、スレッドの最適な数は13となっており、10 QPS結果は衰退したが、それは20を超えた場合、それが再び順番にQPSの減少に影響を与える、非常に頻繁にフルGCが発生します。
JBossのスレッド数:
JBossの場合、使用するスレッドの数はスレッド接続、HTTPなど、AJPなどの種類に依存して設定します
httpとAJPの設定が正確に非常にシンプルな、同じです。
例えば、AJP、またはserver.xmlにTomcatのserver.xmlの-を検索するには:
デフォルトのスレッド数は200です
<コネクタポート= "8009"アドレス= "$ {とjboss.bind.address}"のConnectionTimeout = "15000"プロトコル= "AJP / 1.3" maxThreadsの= "200" minSpareThreads = "40" MaxSpareThreadsの取る= "75" maxPostSize = "512000 "acceptCountを=" 300"がbufferSize = "16384" emptySessionPath = "false"をenableLookups = "false"をにredirectPort = "8443" useBodyEncodingForURI = "真" />
ここでは20にデフォルトのスレッド数は、当然のことながら、アイドル状態のスレッドの他の適切な最小数とアイドルスレッドの最大数もいくつかの調整を行います。
<コネクタポート= "8009"アドレス= "$ {とjboss.bind.address}"のConnectionTimeout = "15000"プロトコル= "AJP / 1.3" maxThreadsの= "20" minSpareThreads = "20" MaxSpareThreadsの取る= "20" maxPostSize = "512000 "acceptCountを=" 300"がbufferSize = "16384" emptySessionPath = "false"をenableLookups = "false"をにredirectPort = "8443" useBodyEncodingForURI = "真" />