【學習背景】
學習Java的小伙伴,應該對JVM有自己的一定了解,但是你有用過JDK自帶的JVM的性能調優工具之一
jconsole嗎?不知道也沒關系,本文將帶你花幾分鐘快速了解如何使用jconsole對JVM進行監控,大家后續有時間可以自己動手學習下,特別是需要進行JVM性能優化的時候,個人覺得在作業中還是比較常用的,
進入正文~
學習目錄
- 一、JDK說明
- 二、Windows運行jconsole
- 2.1 安裝JDK
- 2.2 Windows運行jconsole
- 三、Linux配置遠程
- 3.1 配置JDK
- 3.2 配置Tomcat
- 3.2.1 安裝Tomcat
- 3.2.2 配置Tomcat遠程
- 3.2.2.1 配置Tomcat遠程(無密碼)
- 3.2.2.2 配置Tomcat遠程(有密碼)
- 附錄:如開啟防火墻則需先放開埠
一、JDK說明
本文以
JDK1.8.202為例,眾所周知Oracle官方JDK從2019年4月16號開始商用收費,最后一個免費JDK版本是1.8.202,JDK8歷史版本下載地址:
https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html
下載不了的,也可以這里直接下載1.8.202:
鏈接:https://pan.baidu.com/s/1sO1pEZIAV5fmRLRUuyXkKw 提取碼:wrsx
官方公告:The Oracle JDK License has changed for releases starting April 16, 2019(即發布1.8.211 && 1.8.212兩個收費版本)
二、Windows運行jconsole
2.1 安裝JDK
官方下載并安裝JDK1.8.202

或者直接下載.exe鏈接:https://pan.baidu.com/s/1sO1pEZIAV5fmRLRUuyXkKw 提取碼:wrsx

雙擊運行jdk-8u202-windows-x64.exe 傻瓜式一步一步往下安裝即可,示例安裝路徑:
D:\Softwares\LearningSoftwares\JDK\jdk1.8.0_202\
2.2 Windows運行jconsole
雙擊JDK安裝目錄下的bin目錄下的jconsole.exe

本地行程直接選中相關行程即可,這里本文以遠程服務器指定開放的Tomcat遠程埠號12345為例進行連接,成功連接后就可以對JVM的記憶體進行監控,接下來進行Linux遠程服務器Tomcat的相關配置
三、Linux配置遠程
我這里以個人學習使用的Linux服務器是阿里云的CentOs 7.7為例,部署Tomcat并配置一個遠程
12345埠(只是用來做監控的埠,非實際Tomcat的應用埠號,如8080),可以將Java工程部署到Tomcat下,也可以不用部署,因為Tomcat啟動運行本身就是依賴JDK(或JRE),正常啟動之后本身會占用的一個行程,后續就可以在Windows下通過JDK安裝目錄bin目錄下的jconsole對Linux遠程服務器的運行Tomcat行程來對JVM的記憶體進行監控,本文就先不部署應用了,主要啟動Tomcat即可
3.1 配置JDK
已配置好JDK,可以跳過該步驟~
查看JDK版本:java -version

如果沒有安裝JDK,則需要先下載并安裝好JDK
修改/etc/profile配置并添加如下內容(需修改JDK實際路徑):
export JAVA_HOME=/usr/java/jdk1.8.0_202
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
重繪配置生效:source /etc/profile
再次查看JDK:java -version
3.2 配置Tomcat
3.2.1 安裝Tomcat
已配置Tomcat的可以跳過該步驟
沒有安裝Tomcat的,可以先到官方下載,再進行解壓安裝
https://archive.apache.org/dist/tomcat/tomcat-8/v8.0.24/bin/

我這里Tomcat解壓并安裝的示例路徑如下:
mkdir -p /usr/tomcat/
cd /usr/tomcat/
tar -xvf apache-tomcat-8.0.24.tar.gz
cd /usr/tomcat/apache-tomcat-8.0.24
啟動Tomcat
cd /usr/tomcat/apache-tomcat-8.0.24/bin
./startup.sh

查看Tomcat啟動日志
tail -f /usr/tomcat/apache-tomcat-8.0.24/logs/catalina.out
查看Tomcat運行狀態
ps -ef|grep tomcat
ps -ef|grep java
如果Tomcat正常啟動,會出現如下相關行程

3.2.2 配置Tomcat遠程
3.2.2.1 配置Tomcat遠程(無密碼)
無密碼的很簡單,直接修改Tomcat的bin目錄下的catalina.sh,在關鍵資訊Execute The Requested Command上面添加如下內容:
CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname=192.168.xx.x -Dcom.sun.management.jmxremote"
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.port=12345"
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.rmi.port=12345"
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
注意修改***hostname為自己服務器的公網IP,還有***jmxremote.rmi.port這行不能少,少了會無法遠程連接,網上很多這里都沒配置,

網上有些地方發現catalina.sh中配置CATALINA_OPTS 不生效,于是想通過JAVA_OPTS,如修改上面catalina.sh中為JAVA_OPTS:
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.xx.x -Dcom.sun.management.jmxremote"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=12345"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.rmi.port=12345"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
能正常啟動tomcat,但是這種會導致在執行shutdown.sh停止tomcat時報錯,原因是JAVA_OPTS是任何命令的運行時選項,因此執行shutdown.sh命令時會報錯,提示埠(如12345)被占用,而CATALINA_OPTS則只會在"開始"時的選項,不會影響停止操作,

重啟Tomcat
cd /usr/tomcat/apache-tomcat-8.0.24/bin
./shutdown.sh
./startup.sh
tail -f /usr/tomcat/apache-tomcat-8.0.24/logs/catalina.out
查看Tomcat行程
ps -ef|grep tomcat
看到Tomcat行程有遠程hostname和port相關的資訊,說明正常配置

Windows下重新進行遠程連接,不用輸入密碼,直接連接即可

正常連接,可查看時間范圍內的資料,可以對JVM的堆區記憶體進行監控,還可以監控執行緒數、類以及CPU使用率

3.2.2.2 配置Tomcat遠程(有密碼)
第一步:同樣,修改catalina.sh內容
CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname=192.168.xx.x -Dcom.sun.management.jmxremote"
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.port=12345"
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.rmi.port=12345"
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
與無密碼的區別在于,這里***authenticate的值配置為true,表示需要開啟密碼進行鑒權
第二步:配置遠程用戶密碼
cd /usr/java/jdk1.8.0_202/jre/lib/management/
cp jmxremote.password.template jmxremote.password
chmod 600 jmxremote.password
修改jmxremote.password,快捷鍵Shift + G定位到最后,添加一個遠程連接用戶 用戶密碼,如:
tomcat abc@123456

也可以放開現有的monitorRole/controlRole兩個用戶的注解,用來做遠程連接也可以

第三步:配置遠程用戶權限
同樣,當前目錄下,修改jmxremote.access,快捷鍵Shift + G定位到最后,給新加的tomcat用戶讀寫的權限:
tomcat readwrite
保存:wq并退出

重啟Tomcat
cd /usr/tomcat/apache-tomcat-8.0.24/bin
./shutdown.sh
./startup.sh
查看Tomcat
tail -f /usr/tomcat/apache-tomcat-8.0.24/logs/catalina.out
ps -ef|grep tomcat
啟動無報錯,并且查看tomcat行程也有如下看關鍵資訊***authenticate=true表明配置正常

Windows下重新進行遠程連接,輸入用戶密碼進行連接即可

正常連接,監聽堆區記憶體、執行緒數、類以及CPU占用率如下:

附錄:如開啟防火墻則需先放開埠
本文使用的示例遠程埠是12345,如果服務器已開啟防火墻,需要配置防火墻添加該埠,才可以正常遠程連接
查看防火墻的狀態
systemctl status firewalld.service

查看所有已添加埠
firewall-cmd --permanent --list-ports
或者,查看已添加的指定埠
firewall-cmd --query-port=12345/tcp
沒有,則添加指定埠
firewall-cmd --permanent --add-port=12345/tcp
重啟防火墻即可
systemctl restart firewalld.service

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/302502.html
標籤:java
上一篇:漫畫 | 我在阿里云“淘金”
下一篇:Java入門必備知識
