Tomcat 経由で JMX 監視を有効にする方法

Tomcat 経由で JMX 監視を有効にする方法

シミュレーション環境を構築する:
オペレーティングシステム: centos7
メモリ: 1G
1.8.0_131 より
トムキャット:8.0.48

ここでは環境の準備については説明しませんが、Tomcatのjmxを直接設定します。

1. tomcatのbinディレクトリに入る

# cd /opt/tomcat/apache-tomcat-8.0.48/bin/

2. 設定ファイルを編集する

# vim catalina.sh

3. 下の画像の上にパラメータを追加します

パラメータを追加した後の見た目

3.1. この構成では、jmx に接続するためにアカウントやパスワードは必要ありません。

CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Djava.rmi.server.ホスト名=192.168.100.117
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"

設定後のスクリーンショット:

パラメータの説明:

ホスト名: Tomcatを監視するサーバーのIPアドレスです

jmxremote.port: 開く監視ポート番号です

jmxremote.ssl: SSL接続を有効にするかどうか

authenticate: false は、監視にユーザー名とパスワードが必要ないことを意味します。

3.2. ユーザー名とパスワードを設定する必要があります。

CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Djava.rmi.server.ホスト名=192.168.100.117
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password
-Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access"

設定後のスクリーンショット:

パラメータの説明:

authenticate: アカウント認証を有効にするには true

access.file: 権限ファイルのパス

password.file: パスワードファイルのパス

3.3. パスワード検証が設定されていない場合、この手順は不要です。ユーザーとパスワードの検証が有効になっている場合は、この手順が必要です。

3.3.1. JDKインストールディレクトリを見つける

ディレクトリがインストールされている場所がわからない場合は、次のコマンドで見つけることができます。

# java -verbose

3.3.2. jdkディレクトリに切り替える

# cd jre/lib/management/と入力します

ファイルディレクトリにjmxremote.access jmxremote.password.templateファイルがあるので、それをtomcatのconfディレクトリにコピーします。

# cp jmxremote.* /opt/tomcat/apache-tomcat-8.0.48/conf/

3.3.3. jmxremote.access ファイルを変更する

3.3.4. パスワードファイルの名前を変更します。

# mv jmxremote.password.template jmxremote.password

3.3.5 パスワードファイルの編集

# vim jmxremote.password

3.3.6. ファイルを編集した後、アクセスファイルとパスワードファイルの権限を変更する必要があります。そうしないと、Tomcat が起動しません。

# chmod 600 jmxremote.*

4. Tomcatを起動する

[root@ha bin]# ./startup.sh 
CATALINA_BASE を使用: /opt/tomcat/apache-tomcat-8.0.48
CATALINA_HOME の使用: /opt/tomcat/apache-tomcat-8.0.48
CATALINA_TMPDIR を使用: /opt/tomcat/apache-tomcat-8.0.48/temp
JRE_HOME の使用: /usr
CLASSPATH の使用: /opt/tomcat/apache-tomcat-8.0.48/bin/bootstrap.jar:/opt/tomcat/apache-tomcat-8.0.48/bin/tomcat-juli.jar
Tomcatが起動しました。 

4.1. 上記の操作を完了したら、JDK が提供する jvisualvm.exe を使用して Windows に接続し、テストします。

ダブルクリックしてjmx接続を開きます

4.2. tomcatを再起動してjmxが接続できるかどうかをテストします。

# ./shutdown.sh

4.2.1. jmxに再度接続して接続できるかどうかを確認します

データ監視チャートを表示できず、接続もできません

なぜこの問題が発生するのでしょうか?

オンラインで示された結論は次のとおりです。

Tomcat の jmx リモート ヘルスには 2 つのポートが必要です。1 つは登録ポートで、もう 1 つはサービス ポートです。以前に指定したポート 9999 は登録ポートです。Tomcat は起動時にサービス ポートをランダムに指定します。登録ポートは 1 つしかないため、サービスを再起動した後、登録ポートは変更されていませんが、サービス ポートは変更されています。登録ポートを介して再度接続すると、以前のサービス ポートに接続できなくなります。サーバー接続を指定する方法はなく、サービス ポートはランダムです。

1つの方法は、JMXの固定登録ポートとサービスポートを設定し、jarパッケージを介して実現することです。

5. Tomcat の公式サイトにログインします (私の Tomcat バージョンは 1.8.0 ですが、公式サイトでは 1.8.5 のみ使用できることに注意してください)

ウェブサイト: https://tomcat.apache.org/

Tomcatのバージョンに応じてJMXリモートjarを見つけます

6. ダウンロードしたファイルをtomctaのlibディレクトリにアップロードします。

libディレクトリへのリンクを直接wgetしてjarパッケージを取得することもできます。

# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.50/bin/extras/catalina-jmx-remote.jar

7. tomcatのconfディレクトリにあるserver.xmlファイルを編集する

# vim server.xml

次のコンテンツを追加します。

 <リスナークラス名="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
 rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" /> 

8. tomcatのbinディレクトリにあるcatalina.shを編集する

# vim catalina.sh

パラメータを削除するには:

-Dcom.sun.management.jmxremote.port=9999

9. Tomcat テストを再起動します。JMX 登録ポートは 10001、サービス ポートは 10002 です。

10. Tomcatを再起動して再度接続し、テストします。

以前に作成した jmx リモート接続をダブルクリックすると、接続できないことがわかります。これはなぜでしょうか。ここで、上記の接続の pid 番号に注意する必要があります。クエリを実行した後、この pid 番号は Linux の tomcat の pid 番号であることがわかりました。tomcat を再起動すると、新しい pid 番号が生成されるため、接続する場合は新しい接続を作成する必要があります。

11. 再度新しいjmx接続を作成すると、新しいpid番号が取得されます。

12. ここでテストは成功しました。したがって、zabbixを使用してjmxを使用してtomcatを監視する場合、tomcatの再起動やjmxポートが接続できないことを心配する必要はありません。

要約する

以上が編集者が紹介したTomcat経由でJMX監視を有効にするグラフィカルな方法です。皆様のお役に立てれば幸いです!

以下もご興味があるかもしれません:
  • Tomcat の JMX サービス メソッドの紹介
  • Tomcat 構成 JMX リモート接続

<<:  MySQL ストアド プロシージャの概念、原則、一般的な使用法の詳細な説明

>>:  Vue はインターフェースのスライド効果を実装します

推薦する

React で遅延読み込みを使用して最初の画面の読み込み時間を短縮する方法

目次使用インストールルーティングでどのように使用しますか?読み込み速度の比較最近、中間およびバックエ...

ES6拡張演算子の理解と使用シナリオ

目次1. 適用メソッドを置き換え、関数を呼び出すときにパラメータを処理する2. 残りパラメータ(残り...

ノードにおけるhttpモジュールの使用と実行プロセス

ノードにおけるhttpの役割は何ですか? httpモジュールの役割は、サーバーの作成と記述を支援する...

私が良いと思うクールなデザインサイトをいくつかまとめてみました。

ウェブサイトをデザインするにはインスピレーションが必要です。良いインスピレーションを得るには、より多...

体験したい17 404ページ

404 を避けるべきだとどうして言えるのでしょうか? その理由は、ほとんどの 404 ページが粗雑す...

Linux スワップ パーティション (詳細説明)

目次リナックス1. SWAPとは2. swappiness は何を調節しますか? 3. スワップ操作...

Linuxのテキスト処理コマンドsortの詳細な説明

テキストファイルの内容を並べ替える使用方法: ソート + オプション + ファイル名 (複数のファイ...

負の距離(共感) - 相互影響の反復プロセス

ネガティブな距離は共感を意味します。序文(疑問の提起):プロダクトマネージャーは機能を把握します。機...

Docker Swarmを使用してWordPressを構築する方法

原因かつて私は Vultr に WordPress を設定しましたが、よく知られている理由により、こ...

Vueメソッドに基づくシンプルなタイマーの実装

Vueのシンプルなタイマーを参考にしてください。具体的な内容は以下のとおりです原理: setInte...

MySQL スロークエリを通じて MySQL のパフォーマンスを最適化する方法

アクセス数が増えると、MySQL データベースへの負荷が増大します。MySQL アーキテクチャを使用...

CocosCreator Typescriptでテトリスゲームを作る

目次1. はじめに2. 解決すべきいくつかの重要な問題3.最後に書く1. はじめに最近、Cocos ...

リンクAの意味論、書き方、ベストプラクティス

リンク A のセマンティクス、ライティング スタイル、およびベスト プラクティス。私は JavaEy...

JavaScriptはキャンバスを使用して座標と線を描画します

この記事では、JavaScriptでキャンバスを使用して座標と線を描く具体的なコードを参考までに紹介...

リアルタイムコンピューティングフレームワークFlinkクラスタの構築と動作メカニズムについての簡単な説明

目次1. Flinkの概要1.1 基本的な紹介1.2 アプリケーションシナリオ2. 環境の展開2.1...