搭建模擬環(huán)境:
操作系統(tǒng):centos7
內(nèi)存:1G
jdk:1.8.0_131
tomcat:8.0.48
環(huán)境準備我們這里就不直接演示了,直接配置tomcat的jmx
1、進入到tomcat的bin目錄下
# cd /opt/tomcat/apache-tomcat-8.0.48/bin/
2、編輯配置文件
# vim catalina.sh
3、在下圖中上面添加參數(shù)
![](/d/20211016/fe590c64fa90a3663a7e4ec730afd736.gif)
參數(shù)添加后的樣子
3.1、此配置連接jmx不需要賬號密碼:
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=192.168.100.117
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"
配置后的截圖:
![](/d/20211016/d4d4cb92fa86c097c93bf1200a975de3.gif)
參數(shù)說明:
hostname:是監(jiān)控tomcat所在服務器的ip地址
jmxremote.port:端口號,是要開啟的監(jiān)控端口號
jmxremote.ssl:是否要開啟ssl連接
authenticate:false表示監(jiān)控不需要用戶和密碼
3.2、需要配置用戶名、密碼:
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=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"
配置后的截圖:
![](/d/20211016/19a71f51a20db724f0308a604801def5.gif)
參數(shù)說明:
authenticate:為true開啟賬號驗證
access.file:權(quán)限文件路徑
password.file:密碼文件路徑
3.3、當沒有配置密碼驗證的時候,不需要此步操作,當啟用用戶、密碼驗證后需要操作此步驟
3.3.1、找到jdk安裝目錄
如果不知道安裝到目錄那個地方可以通過命令查找:
# java -verbose
![](/d/20211016/5338afd4b17862ef48c9c8ea582217e0.gif)
3.3.2、切換到jdk目錄中
![](/d/20211016/d7f8bba57290aeed32513ba6d54d3ea4.gif)
進入# 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文件
![](/d/20211016/588a927103f285afff477d1623ad0a7d.gif)
3.3.4、重命名密碼文件:
# mv jmxremote.password.template jmxremote.password
3.3.5、編輯密碼文件
# vim jmxremote.password
![](/d/20211016/200795724b88d340447a97d4d6ef14bc.gif)
3.3.6、編輯完文件后,要修改access文件和password文件權(quán)限,不然tomcat啟動不起來
# chmod 600 jmxremote.*
4、啟動tomcat
[root@ha bin]# ./startup.sh
Using CATALINA_BASE: /opt/tomcat/apache-tomcat-8.0.48
Using CATALINA_HOME: /opt/tomcat/apache-tomcat-8.0.48
Using CATALINA_TMPDIR: /opt/tomcat/apache-tomcat-8.0.48/temp
Using JRE_HOME: /usr
Using CLASSPATH: /opt/tomcat/apache-tomcat-8.0.48/bin/bootstrap.jar:/opt/tomcat/apache-tomcat-8.0.48/bin/tomcat-juli.jar
Tomcat started.
![](/d/20211016/a0c87ed1f16245cd5b5ec29c6c35eec4.gif)
4.1、做完上面操作,使用jdk自帶的jvisualvm.exe連接,可以在windows下測試
![](/d/20211016/0bcd70787481935a8d448fa29685a22f.gif)
![](/d/20211016/6e1451f07ac18e26d5d0e000fa43363f.gif)
![](/d/20211016/022fb756a2a90cc1975c0739796e1186.gif)
![](/d/20211016/a23b606ebc9517fa27a798ad6bbf843e.gif)
![](/d/20211016/85536d2206015f2dc3bfecaf501755cc.gif)
雙擊打開jmx連接
![](/d/20211016/c5ce26fca63d31f8df5fc539043f36ee.gif)
![](/d/20211016/6959f588847f50a5fcaf8b79adc23603.gif)
4.2、重啟tomcat,測試jmx是否還可以連接上
# ./shutdown.sh
4.2.1、再次連接jmx查看是否可以連接上
數(shù)據(jù)監(jiān)控圖都查看不了,連接不上
![](/d/20211016/136613ebbb8514cbb6129b99d3d6fe9e.gif)
![](/d/20211016/2ed9dc6cb8b50e3cc532c8f53c75f1d0.gif)
為什會出現(xiàn)這個問題?
網(wǎng)上給出的結(jié)論是:
tomcat的jmx遠程健康是需要兩個端口,一個是注冊端口,一個是服務端口,之前配置指定的9999端口是注冊端口,tomcat在啟動的時候會隨機指定一個服務端口,由于我們注冊端口只有一個,所以在重啟服務后,注冊端口沒有變化,服務端口已經(jīng)變了,再次通過注冊端口連接已經(jīng)連接不上之前的服務端口了,沒有辦法指定服務端連接,服務端口是隨機的。
有一種方法是設置jmx固定的注冊端口和服務端口,通過jar包實現(xiàn)
5、登錄tomcat官網(wǎng)(注意,我的tomcat版本是1.8.0的官網(wǎng)上只有1.8.5的也可以使用)
網(wǎng)址:https://tomcat.apache.org/
根據(jù)自己的tomcat版本找到JMX Remote jar
![](/d/20211016/a2809b010cb3e9d9dca42e30fd0ea22f.gif)
6、把下載下來的上傳到tomcta的lib目錄下
獲取jar包的連接也可以直接wget到lib目錄下
# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.50/bin/extras/catalina-jmx-remote.jar
![](/d/20211016/2b7c8ec51a47f22b2868ac5e6fb9943b.gif)
7、編輯tomcat的conf目錄下的server.xml文件
# vim server.xml
添加下面內(nèi)容:
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />
![](/d/20211016/a8be03cad58202a74ec42e95c8da4b3f.gif)
8、編輯tomcat的bin目錄下catalina.sh
# vim catalina.sh
刪除參數(shù):
-Dcom.sun.management.jmxremote.port=9999
![](/d/20211016/0825cda5c6511589503c5c48486a420d.gif)
9、重啟tomcat測試,jmx注冊端口為10001,服務端口為10002
![](/d/20211016/44dcd53e1ba6374168590ad459f4da7b.gif)
![](/d/20211016/d930aee67f08249c710c4248991f87c0.gif)
![](/d/20211016/d84d58cc1a688267534a890a1c09f218.gif)
![](/d/20211016/2d4fb3256009b4c82b99c84a5443cb30.gif)
![](/d/20211016/16ca1cc822e23bcdc6d4c11ac0336901.gif)
10、重啟tomcat再次連接測試
當我們雙擊之前創(chuàng)建的jmx遠程連接的時候會發(fā)現(xiàn)也連接不上,這是為什么呢,這里我們要注意上面連接中的pid號,經(jīng)過查詢,我們發(fā)現(xiàn)這個pid號就是linux中tomcat的pid號,當我們重啟tomcat后,會產(chǎn)生新的pid號,所以我們想要連接就要新建一個連接
![](/d/20211016/3932d97f73a2d60cbd9cc58e2292749c.gif)
![](/d/20211016/4fa8b02dd31b5e7ab8fa93ed0b9e6909.gif)
11、我們再次新建jmx連接的時候會獲取新的pid號
![](/d/20211016/8a03729cf10047e566a39520ac95402c.gif)
![](/d/20211016/9ad8dae04686fcb6c705a63dba3fd512.gif)
12、到這里我們就測試成功了,這樣在我們使用zabbix使用jmx監(jiān)控tomcat的時候就不用擔心tomcat重啟jmx端口連接不上了
總結(jié)
以上所述是小編給大家介紹的通過Tomcat開啟JMX監(jiān)控的方法圖解,希望對大家有所幫助!