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 ステートメントはどのように実行されますか?

推薦する

プロジェクトの再構築からプロジェクトにおける CSS3 カスタム変数の使用について話す

CSS3変数について変数を宣言するときは、変数名の前に 2 つのハイフン ( -- ) を追加します...

Tomcat 7.0 で仮想ディレクトリを設定し、仮想パスを構成する方法

Tomcat7.0は仮想ディレクトリを設定します(1)現在、当社のウェブサイトはデフォルトのディレク...

show processlist コマンドによる MySQL パフォーマンス検査の説明

show processlist コマンドは非常に便利です。MySQL の実行が 50% 以上になる...

Docker が MySQL を作成する説明

1. MySQLイメージをダウンロードするコマンド: docker pull mysql 2. コン...

1 行または複数行のテキストがオーバーフローしたときに省略記号を表示する CSS を実装する方法

1. 単一行オーバーフロー1. 1 行がオーバーフローした場合、超過部分は表示されます...または、...

Vue のデータ応答性に関する詳細な理解

目次1. ES 構文のゲッターとセッター2. ES構文でのdefineProperty 3. Vue...

JavaScript でグレイウルフのポットビーティングゲームを実装

1. プロジェクト文書 2. ページレイアウトにHTMLとCSSを使用するHTML部分 <di...

HTML で margin:0 auto を使用するとページ全体が中央に配置されない問題の解決方法

今日、jsp ページを書きました。<div style="margin:0 auto...

js を使用してウォーターフォール効果を実現する

この記事の例では、滝の流れの効果を実現するためのjsの具体的なコードを参考までに共有しています。具体...

Vue の基本的な手順の例のグラフィック説明

目次1. v-on指令1. 基本的な使い方2. 糖衣構文3. イベントパラメータ4. イベント修飾子...

ウェブページ内の 2 つのボックス モデル (W3C ボックス モデル、IE ボックス モデル)

Web ページ ボックス モデルには 2 種類あります。 1: 標準 W3C ボックス モデル。2:...

MySQL データベースの文字化け問題の原因と解決策

序文データベースのデータを表示すると、文字化けした文字が表示されることがあります。実際、どのようなデ...

MySQLでグローバル変数とセッション変数を設定する2つの方法の詳細な説明

1. MySQL でグローバル変数を変更するには 2 つの方法があります。方法 1: my.ini ...

Navicat が MySQL にリモート接続するときに発生する 10060 不明エラーを解決する方法

はじめに:今日は、サーバー上のMySQLにリモート接続したいと思います。使用するソフトウェアはNav...

携帯電話番号が合法かどうかを判断するWeChatアプレットのサンプルコード

目次シナリオ効果コード要約するシナリオ登録ページに携帯電話番号を入力し、登録インターフェイスを要求す...