スレッドプールのサイズを設定・ホワイトII

どのくらいのスレッドプールサイズ適切な?

アウトライン

一般に、サービスの2種類に分けられます。

また、計算集約型、CPU速度、コンピュータに結合したCPU(または計算限界)に依存してタスクを完了するためのコンピュータ時間として知られている:高いCPU使用率、多くの秒または数分の持続時間の100%以内とすることができます。割り込み処理が遅い又は生成ペリフェラルを処理する無期限に遅延させることができます。

  • IO集約型

終了時間は、それが完了するまでに時間がかかり、主にI / O操作によって決まる待機に費やされています。これはCPU集中型のタスクとは対照的です。要求されたデータレートは、消費のレートよりも低い場合、または他の言葉で、時間はそれが要求されたデータは、それがデータを処理するのに要する時間以上で取る、それが起こるのだろう。

着陸それを導くことができる何のプラクティスはありませんか?法律のリトル

リクエストのシステム=の要求到着率に*それぞれ別々の要求のために費やされた平均時間

リトルの法則は、つまり、スレッドプールのサイズを使用して決定されます

スレッドプールのサイズ=(スレッドIOスレッドCPU時間+)/スレッドCPU / CPU番号

値が必要です。

  • 消費要求時間
    • スレッド時間+ IOスレッドのCPU時間
  • この要求時間
    • スレッドのCPU時間
  • CPUの数

要求時間がかかります

Webサービスは、フィルターによる消費の前と後の要求を傍受するための時間を得ることができます

      
      
1
2
3
4
5
6
7
8
9
10
11
      
      
パブリック クラスが 実装して フィルターを {
公共 ボイド のdoFilter (のServletRequest要求たServletResponse応答) {
長い スタート=にSystem.currentTimeMillis();
してみてください {
} 最後に {
長い コスト=にSystem.currentTimeMillis() -スタート。
}
}
}

CPU時間

CPU時間を要求=合計時間 - CPU IO時間

要求がクエリのDB操作を有すると仮定すると、限りD​​Bクエリー時間がかかり、CPU IO時間であるとして、CPU時間を描画することができます。

AOPは、スレッドIO時間がかかりを得るためにセクションJDK動的プロキシまたはCGLIBの方法により添加することができます。

      
      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
      
      
パブリック クラス DaoInterceptorは 実装 MethodInterceptorのを {
@オーバーライド
public Object invoke(MethodInvocation invocation) throws Throwable{
StopWatch watch = new StopWatch();
watch.start();
Object result = null;
Throwable t = null;
try{
result = invocation.proceed();
} catch(Exception ex){
//handle ex
} finally{
// 得出时间
watch.stop();
}
return result;
}
}

CPU数目

      
      
1
      
      
cat /proc/cpuinfo | grep "processor" | wc -l

总结

还是需要通过压测来进行微调,以保证配置的正确性。

オリジナル:ビッグボックス  の設定スレッドプールサイズ・ホワイトII


おすすめ

転載: www.cnblogs.com/chinatrump/p/11614932.html
おすすめ