web-dev-qa-db-ja.com

Tomcatのスレッドプールを監視/ログするにはどうすればよいですか?

Tomcatをインストールしていますが、スレッドが適切に解放されていないために、スレッドプールが時間とともに減少している可能性があります。 maxthreadsに達するとcatalina.outでエラーが発生しますが、この仮説を検証できるように、使用中のスレッドの数を5分ごとにファイルに記録したいと思います。誰もこれをどのように行うことができるかアドバイスできますか?

また、このインストールにはTomcatマネージャーはありません。元のインストールを行った人が何らかの理由でマネージャーwebappを削除したようです。マネージャーが上記を実行できるかどうか、または既存のインストールを損傷せずに再インストールできるかどうかはわかりませんか?本当にやりたいことは、スレッドプールを追跡することです。

また、Tomcatのmaxthreadsは200ですが、Apacheの同時接続の最大数が少ないことに気付きました(Apacheはmod_proxyおよびmod_proxy_ajp(AJP 1.3)を使用してTomcatにフィードします)。それも間違っているようですが、これらの数字の正しい関係は何ですか?

助けていただければ幸いです:D

更新:直接的なJMXアクセスが機能したと言う簡単な更新。ただし、Dcom.Sun.management.jmxremote.Hostも設定する必要がありました。 localhostに設定して動作しましたが、サイコロなしでは動作しませんでした。他の誰かがJMXを有効にしようとして同様の問題を抱えている場合は、ローカルマシンから接続している場合でも、この値も設定することをお勧めします。 Tomcatの一部のバージョンでは必要なようです。


JMXへの直接アクセスが機能したと言う簡単な更新です。ただし、Dcom.Sun.management.jmxremote.Hostも設定する必要がありました。 localhostに設定して動作しましたが、サイコロなしでは動作しませんでした。他の誰かがJMXを有効にしようとして同様の問題を抱えている場合は、ローカルマシンから接続している場合でも、この値も設定することをお勧めします。 Tomcatの一部のバージョンでは必要なようです。

31
Alex P

直接JMXアクセス

これをcatalina.sh/batに追加してみてください:

-Dcom.Sun.management.jmxremote
-Dcom.Sun.management.jmxremote.port=5005
-Dcom.Sun.management.jmxremote.ssl=false
-Dcom.Sun.management.jmxremote.authenticate=false

更新:Alex Pは、状況によっては次の設定も必要になることを示唆しています。

-Dcom.Sun.management.jmxremote.Host=localhost

これにより、ポート5005でのリモート匿名JMX接続が可能になります。プラグイン経由でJMXを参照できるJVisualVMを検討することもできます。

探しているのは、Catalina-> ThreadPool-> http-bio-8080->さまざまな興味深いメトリックです。

JMXプロキシサーブレット

より簡単な方法は、Tomcatの JMX proxy servlet under: http:// localhost:8080/manager/jmxproxy を使用することです。たとえば、次のクエリを試してください。

$ curl --user Tomcat:tomcat http://localhost:8080/manager/jmxproxy?qry=Catalina:name=%22http-bio-8080%22,type=ThreadPool

少しのgreppingとスクリプト作成により、アプリケーションを簡単かつリモートで監視できます。 Tomcat:tomcatは、manager-jmxconf/Tomcat-users.xmlロールを持つユーザーのユーザー名/パスワードであることに注意してください。

15

よりエンタープライズ向けのソリューション。実稼働環境でNew Relicを使用しています。

これにより、経時的なスレッドプールへの変更のグラフ​​が提供されます。

2
Tinman

jolokia.war をデプロイしてから、JSONでmbeans値を取得できます(マネージャーなし):

http:// localhost:8080/jolokia/read/Catalina:name = *、type = ThreadPool?ignoreErrors = true

一部の値(currentThreadsBusy、maxThreads、currentThreadCount、connectionCount)のみが必要な場合:

http:// localhost:8080/jolokia/read/Catalina:name = *、type = ThreadPool/currentThreadsBusy、maxThreads、currentThreadCount、connectionCount?ignoreErrors = true

{
    request: {
       mbean: "Catalina:name="http-nio-8080",type=ThreadPool",
       attribute: [
          "currentThreadsBusy",
          "maxThreads",
          "currentThreadCount",
          "connectionCount"
       ],
       type: "read"
    },
    value: {
       currentThreadsBusy: 1,
       connectionCount: 4,
       currentThreadCount: 10,
       maxThreads: 200
    },
    timestamp: 1490396960,
    status: 200
}

注:この例はTomcat7 +で機能します。

2
c-toesca