參考博客
https://blog.csdn.net/u010004317/article/details/82948040
https://blog.csdn.net/lienfeng6/article/details/78676760
一、在服務器上部署JMX服務
1.進入tomcat的bin目錄,修改catalina.sh文件
#tomcat的bin目錄,修改catalina.sh: #vim catalina.sh # 添加如下配置: CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access -Djava.rmi.server.hostname=149.129.124.xx" # -Dcom.sun.management.jmxremote.ssl 是否開啟ssl傳輸,設為false即可 # -Dcom.sun.management.jmxremote.authenticate 是否校驗,設為false即可 # -Dcom.sun.management.jmxremote.password.file 遠程登錄的賬號管理文件,下文會講到如何獲取 # -Dcom.sun.management.jmxremote.access.file 同上 # -Djava.rmi.server.hostname 這個很重要,如果不填的話,可以重啟成功,按時客戶端的jvisual是無法遠程連接上的,這里的IP必須是公網IP,公網IP
2.進入tomcat的conf 編輯server.xml文件,添加jmx的端口監聽
server.xml文件,添加jmx的端口監聽
<!-- # 進入tomcat的conf: vim server.xml # 添加如下的監聽配置。其中10001和10002是自定義的兩個端口,用於遠程連接需要 --> <!-- 遠程監控 --> <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />
3.添加jmx的訪問控制文件
# 進入tomcat/conf的目錄 # 執行以下命令 cp 復制兩個文件 cp $JAVA_HOME/jre/lib/management/jmxremote.password.template jmxremote.password cp $JAVA_HOME/jre/lib/management/jmxremote.access jmxremote.access vi jmxremote.password # 取消下面兩行的注釋,取消注釋表示你可以使用這兩個賬號進行遠程登錄, 使用就打開,不使用可以不打開 #monitorRole QED #controlRole R&D # 也可以自定義賬號,格式如 username passwd,如我想要添加一個名稱叫root的賬號,密碼是root@123 vim jmxremote.password # 在最后一行添加 root root@123 # 修改完jmxremote.password文件,還要修改jmxremote.access文件,添加權限 zexin readwrite chmod 600 jmxremote.password chmod 600 jmxremote.access
4.添加catalina-jmx-remote.jar包到tomcat的lib目錄下
在maven倉庫下載,找到對應的版本
https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-catalina-jmx-remote
5.連接測試結果
二、安裝jstat服務
1. 安裝好JMX后,點擊 Visual GC 會顯示不受JVM支持,需要安裝jstat服務
2. JDK的bin目錄下,配置安全策略
cd $JAVA_HOME/bin # 新建安全策略文件 vim jstatd.all.policy # 添加如下內容: grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; }; # 原文說明,我不么深入研究,有些文章會在$JAVA_HOME/jre/lib/security/java.policy直接修改,本人我是不推薦的,能不動 到原來的配置文件進來就不要碰到,而且在java.policy直接修改,賦予的權限太高,也不安全。
3.啟動jstat
cd $JAVA_HOME/bin # 啟動命令:(啟動成功后,沒有報錯且有日志輸出就是正常的) ./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=149.129.124.xx -J-Djava.rmi.server.logCalls=false # 解釋: # -J-Djava.rmi.server.hostname=149.129.124.xx 這里要填的是公網IP # -J-Djava.rmi.server.logCalls=true 是否開啟日志,第一次配置最好開啟,可以確定是否啟動成功,如果是已經配置很多次了,能確保成功的,建議就把該日志關掉,因為該日志的產生量不小,容易撐爆硬盤 # 在生產環境的配置如下(去掉日志打印,加入后台運行),這里我在監控的時候,通過輸入pid發現不行,不知道怎么回事,后面再查看下問題所在: ./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=149.129.124.xx &
4.查看效果(在非后台模式啟動下查看的)