0

Web アプリケーションを実行している Tomcat サーバーがあります: http://www.LoudReview.com。これは、128 MB のメモリが許可された制限付きのホスティング アカウントです。何度も、Tomcat サーバーへの接続がタイムアウトします。

システムの負荷が高いときにメモリを集中的に使用する操作を減らすために、Tomcat サーバーの負荷を監視できる方法があるかどうかを知りたいです。システムによって使用されているメモリの量、または既に占有されている接続の数を監視し、それに応じて要求を処理できるように、インテリジェンスを構築できますか?

可能であれば、実装が簡単なソリューションを好みますが、より複雑な方法でも問題ありません。

ありがとう

4

1 に答える 1

0

java.lang:type=OperatingSystemキーと属性を使用して、JMX を使用してシステム負荷平均を取得できますSystemLoadAverage。値は倍精度浮動小数点値 (別名「double」) になります。

負荷平均は、サンプル期間中の実行キューの平均の長さであることに注意してください (上記の数値は、瞬時または 1 分間の平均である可能性があります)。システムによっては、処理を待機しているリクエストの数に関係なく、JVM プロセスが「1」としてカウントされる場合があります。したがって、負荷平均が常に 1.0 である可能性があります (これは、CPU が完全に使用されていることを示しています) が、CPU は、検出できない多くの要求を実際にスラッシング アラウンドしています。

ほとんどのリクエストがすべて同じ「コスト」である場合、リクエストのスループットをシステムの「負荷」のより良い尺度と見なすことができます。JMX を介してそのようなメトリックを取得することもできますが、コネクタの名前を計算する必要があります (または、コネクタを使用して接続しjconsole、見つかるまで参照するだけです)。

Tomcat のコネクタにはそれぞれ、キーを持つ JMX Bean がありますCatalina:type=GlobalRequestProcessor,name="[protocol]-[connectortype]-[localip-?]-[portnum]。例はCatalina:type=GlobalRequestProcessor,name="http-nio-127.0.0.1-8217です。役に立つ属性が 3 つあります。

  1. maxTime
  2. processingTime
  3. requestCount

これらの値をサンプリングして独自の負荷を追跡するかresetCounters、Bean の操作を使用してカウンターをリセットし、JMX Bean にすべてのメトリックを保持させることができます。

于 2012-06-11T17:52:53.803 に答える