JConsoler を使って Tomcat の JVM メモリを監視する方法を説明します

JConsoler を使って Tomcat の JVM メモリを監視する方法を説明します

JConsoler による Tomcat の JVM メモリの監視

1. Tomcatを監視する方法

  • シンプルなコマンド
  • 既製のスクリプト
  • Zabbixによるカスタム監視

カスタム監視: コマンドで取得できるものはすべて監視可能

jmx 経由で Java を監視する

  • その他の監視

ipmi によるハードウェアの監視

ネットワークデバイスがSNMPをサポートしている限り、SNMPを介してネットワークデバイスを監視します。

2. Java独自の監視コマンド

  • jpsはJava関連のプロセスをエクスポートします
  • フォーマット: jps -lvm
  • パラメータオプション: -lvm 最も詳細
[root@localhost ~]# jps -lvm
7457 org.apache.catalina.startup.Bootstrap を開始します -Djava.util.logging.config.file=/application/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -Dcatalina.base=/application/tomcat -Dcatalina.home=/application/tomcat -Djava.io.tmpdir=/application/tomcat/temp
7525 org.apache.catalina.startup.Bootstrap を開始します -Djava.util.logging.config.file=/application/tomcat_8082/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -Dcatalina.base=/application/tomcat_8082 -Dcatalina.home=/application/tomcat_8082 -Djava.io.tmpdir=/application/tomcat_8082/temp
9144 sun.tools.jps.Jps -lvm -Denv.class.path=.:/application/jdk/lib:/application/jdk/jre/lib:/application/jdk/lib/tools.jar -Dapplication.home=/application/jdk1.8.0_60 -Xms8m
7482 org.apache.catalina.startup.Bootstrap を開始します -Djava.util.logging.config.file=/application/tomcat_8081/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -Dcatalina.base=/application/tomcat_8081 -Dcatalina.home=/application/tomcat_8081 -Djava.io.tmpdir=/application/tomcat_8081/temp
  • jmapはjvm情報をエクスポートします。カスタム監視によく使用されます。
  • フォーマット: jmap pid
  • パラメータ: -heap
[root@localhost ~]# jmap -heap 7457
プロセス ID 7457 に接続しています。お待ちください...
デバッガーが正常に接続されました。
サーバーコンパイラが検出されました。
JVMバージョンは25.60-b23です

スレッドローカルなオブジェクト割り当てを使用します。
マークスイープコンパクトGC

ヒープ構成:
   最小ヒープ空き率 = 40
   最大ヒープ空き率 = 70
   最大ヒープサイズ = 255852544 (244.0MB)
   新しいサイズ = 5570560 (5.3125MB)
   最大新規サイズ = 85262336 (81.3125MB)
   古いサイズ = 11206656 (10.6875MB)
   新しい比率 = 2
   生存率 = 8
   メタスペースサイズ = 21807104 (20.796875MB)
   圧縮クラススペースサイズ = 1073741824 (1024.0MB)
   最大メタスペースサイズ = 17592186044415 MB
   G1ヒープ領域サイズ = 0 (0.0MB)

ヒープ使用量: #監視する場合は、この列に注意してください。新しい世代 (Eden + 1 Survivor スペース):
   容量 = 12779520 (12.1875MB)
   使用済み = 11689352 (11.147834777832031MB)
   空き = 1090168 (1.0396652221679688MB)
   91.46941356169872% 使用済み
エデンスペース: #監視にはこの列に注意してください 容量 = 11403264 (10.875MB)
   使用済み = 11059616 (10.547271728515625MB)
   空き = 343648 (0.327728271484375MB)
   96.98640669899426% 使用済み
宇宙から: #監視するには、この列に注意してください 容量 = 1376256 (1.3125MB)
   使用済み = 629736 (0.6005630493164062MB)
   空き = 746520 (0.7119369506835938MB)
   45.75718470982143% 使用済み
スペースへ: #監視の場合はこの列に注意してください 容量 = 1376256 (1.3125MB)
   使用済み = 0 (0.0MB)
   空き = 1376256 (1.3125MB)
   0.0% 使用済み
tenured 世代: #監視の場合は、この列に注意してください 容量 = 28164096 (26.859375MB)
   使用済み = 18313224 (17.46485137939453MB)
   空き = 9850872 (9.394523620605469MB)
   65.02329774760035% 使用済み

21146 個のインターンされた文字列が 1882520 バイトを占めています。
  • jstatck は Java プロセス情報をエクスポートします。これは、Java プログラムの障害によく使用されます。開発者との調査のためにスレッド情報をエクスポートする必要があります。
  • フォーマット: jstack -l pid

[root@localhost ~]# jstack -l 7457

3. Tomcatのトラブルシューティング事例

システム負荷が高く、TomcatがCPUを多く占有している

  • 1. jps/top/htopはどのJavaプロセスが原因であるかを正確に判断します
  • 2.jstackはJavaスレッドをエクスポートします
  • 3.catalina.out ログ分析
  • 4.jmapはJVM情報をエクスポートし、matツールで分析できます。

4. Tomcat JMX監視を構成する

  • カスタム監視: スクリプトをTomcatサーバー上とZabbix構成ファイルに直接記述します。
  • まず、zabiix サーバーに zabbix-java-gateway をインストールし、tomcat サーバーで監視機能を有効にする必要があります。
  • tomcatはjmx監視機能を有効にします
#bin/catalina.sh を変更する
[root@localhost tomcat]# vim bin/catalina.sh
# 別々の行に記述することはできません。そうしないと、コマンドが見つからないというエラー メッセージが表示されます。1 行に記述してください。CATALINA_OPTS="$CATALINA_OPTS"
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jxmremote.ssl=false
-Djava.rmi.server.ホスト名="192.168.81.210"
#正しい書き方 CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jxmremote.ssl=false -Djava.rmi.server.hostname=192.168.81.210"


#説明CATALINA_OPTS="$CATALINA_OPTS" #Tomcat の起動パラメータを変更します -Dcom.sun.management.jmxremote #Tomcat リモート管理機能を有効にします -Dcom.sun.management.jmxremote.port=12345 #ポート 12345 に加えて、リモート管理機能は 2 つのランダム ポートも生成します。すべてのポートを開くことができます Dcom.sun.management.jmxremote.authenticat=false #監視中に認証が必要ですか? -Dcom.sun.management.jmxremote.ssl=false #SSL 接続は有効ですか? -Djava.rmi.server.hostname="192.168.81.210" #Tomcat が配置されているサーバーの IP を設定します

設定が完了したら、Tomcatを再起動し、psコマンドを使用して、出力情報に[root@localhost tomcat]# ps aux | grep javaと記述した行がさらにいくつかあることを確認します。
ルート 17786 5.7 10.6 2306592 105860 ポイント/1 Sl 15:52 0:08 /application/jdk/bin/java
-Djava.util.logging.config.file=/application/tomcat/conf/logging.properties 
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 
-Djdk.tls.ephemeralDHKeySize=2048 
-Djava.protocol.handler.pkgs=org.apache.catalina.webresources
-Dorg.apache.catalina.security.SecurityListener.UMASK=0027
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jxmremote.ssl=false 
-Djava.rmi.server.ホスト名=192.168.81.210 
-無視.endorsed.dirs= 
-クラスパス /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar 
-Dcatalina.base=/アプリケーション/tomcat 
-Dcatalina.home=/application/tomcat 
-Djava.io.tmpdir=/application/tomcat/temp org.apache.catalina.startup.Bootstrap 開始

ss/netstat コマンドを使用して、3 つの追加ポートを確認します [root@localhost tomcat]# ss -lnptu | grep java
tcp LISTEN 0 100 :::8080 :::* ユーザー:(("java",pid=17786,fd=56))
#設定 tcp LISTEN 0 50 :::12345 :::* users:(("java",pid=17786,fd=22))
#ランダム1
tcp LISTEN 0 50 :::46272 :::* ユーザー:(("java",pid=17786,fd=21))
# ランダム2
tcp LISTEN 0 50 :::46081 :::* ユーザー:(("java",pid=17786,fd=24))
tcp LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* ユーザー:(("java",pid=17786,fd=65))

5. Jsconsoleを使用してJMXに接続し、監視データを表示します。

ここに画像の説明を挿入

JConsoler を使って Tomcat の JVM メモリを監視する方法についてはこれで終わりです。JConsoler による Tomcat JVM メモリの監視の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JVM の概要: メモリ構造 (ヒープ、メソッド領域)
  • JFR を使用したメモリ リークの解決に関する JVM の簡単な説明
  • Huawei の技術専門家が JVM メモリ モデルを説明 (コレクション)
  • Docker JVM メモリ使用量の表示

<<:  psdカット画像をdiv+css形式に変換する

>>:  MySQL では SQL ステートメントはどのように実行されますか?

推薦する

JavaScriptプロトタイプチェーン図のまとめと実践

目次プロトタイプチェーンプロトタイプチェーンに基づいてシンプルなJQueryライブラリを実装すること...

JTAを実装するためにAtomikosと組み合わせたTomcatについて

最近、プロジェクトは環境を切り替え、WebLogic を Tomcat に置き換えました。途中で発生...

Windows10システムにMySQL 5.7.17をインストールする

オペレーティング システム win10 MySQL は、公式 Web サイトからダウンロードした 6...

MySQL データベース データのロード 複数の用途

目次MySQL Load Dataの多様な用途1. LOAD の基本的な背景2. 基本パラメータをロ...

MySQL Truncate の使用方法の詳細な説明

目次MySQL 切り捨ての使用1. 構文を切り捨てる2. Truncateの使用上の注意3. TRU...

JS オブジェクトのコピー (ディープ コピーとシャロー コピー)

目次1. 浅いコピー1. Object.assign(ターゲット、ソース、ソース...) 2. スプ...

JavaScript で判決文をエレガントに記述する例

目次序文1. モナドの判断1.1 例1.2 オブジェクトに入れる1.3 マップに載せる2. 複数の判...

Vueのコンポーネントのprops属性について詳しく説明します

目次質問1: 小道具は具体的にどのように使用されますか?原理は何ですか?下を見る質問 2: 年齢に ...

Linux で rpm パッケージを見つけるために CD をマウントする方法

前面に書かれたLinux を使用する際にソフトウェアをインストールする必要がある場合があります。もち...

Maven プロジェクトのリモート デプロイメント && Tomcat を使用してデータベース接続を構成する方法

1つ。 tomcat を使用したリモート展開1.1 発生した問題:プロジェクトでは、サードパーティの...

JS の FileReader を介して .txt ファイルの内容を取得する方法

目次JSはFileReaderを通じて.txtファイルの内容を取得します。 .txtファイルの読み取...

MySQL ロックブロッキングの詳細な分析

日常のメンテナンスでは、スレッドがブロックされることが多く、データベースの応答が非常に遅くなります。...

XHTMLはHTMLのいくつかの廃止された要素を使用しなくなりました

CSS ウェブページレイアウトを行う場合、XHTML1.0 仕様に準拠する必要があることは誰もが知っ...

Docker-compose ワンクリックデプロイ gitlab 中国語版の方法手順

1. GitLabの紹介Gitlab 公式アドレス: https://about.gitlab.co...

Vue における $router と $route の違いの詳細な説明

通常、vue プロジェクトではルーティングを使用します。vue-router は vue.js の公...