2011-08-08 20 views
3

属性processingTimeのTomcat 6のMBean Catalina:type=GlobalRequestProcessor,name=http-0.0.0.0-8080の意味は?Tomcat:コネクタの「processingTime」とはどういう意味ですか?

私がこれを理解する限り、特定のコネクタの処理時間は起動後のミリ秒単位であることを意味します。しかし、毎分この値を測定すると、60kよりはるかに大きい値を返すことがあります(つまり、最大1000kのデルタ値を取得しています)。

私の質問は、です。ミリ秒を測定しています。リアルタイムまたはCPU時間?すべてのコネクタスレッドの処理時間が累積されていますか?

processingTimeを監視するための適切なしきい値は何ですか?

答えて

2

コードを見ると、これは、それぞれの着信要求を処理するために必要な、で測定されたのの累積ミリ秒です。したがって、(システムクロックが安定しているシステムでは)常にビジー状態にある個々のhttpコネクタスレッドのこの測定値は、毎分60,000を超えて増加してはなりません。ただし、GlobalRequestProcessorの場合、処理される同時要求の数によっては、それよりもはるかに高速になります。

1秒間に100リクエストが満たされ、値を返す前に10秒間ブロックされる100リクエストがある場合、GlobalRequestProcessorのこのカウンタはその分で100x1x1000 + 100x10x1000 = 1,100,000だけ増加します。

これはウォールクロックの経過時間を測定するため、サーバー上の時計が前にジャンプすると、経過時間の誤った値が大きくなることに注意してください。つまり、サーブレットの処理中に1分だけ時間が前に移動し、サーブレットが要求を処理するのに20秒かかった場合、この測定はサーブレットが要求を処理するのに80秒かかったことを通知します。 DST "Spring Forward"が発生したときにライブリクエストが発生した場合、そのリクエストに1時間以上かかることがあります。つまり、このJMX測定値は1時間以上増加します。私が見たバージョンでは、クロックが後ろに飛ぶと、このカウンタを減らすことができます!うまくいけば、Tomcat 6はSystem.nanoTime()を使ってシステムクロックの安定性への依存を避けることを願っています。

Java 1.5より前のバージョンでは、実際の経過時間を測定する良い方法はありません(壁時計時間とは対照的に)。 Tomcat 6.x以前ではJava 5以降は必要ないため、実際にはミリ秒以外の何かを測定する方法や、クロックの変化に依存しない実際の経過時間を測定する方法はありません。 (これを行うためにリフレクションを使用していない限り、私は気付いていませんが、私はそれを探していません)

関連する問題