使用jvisualvm來遠端觀察Java程式
這裡要介紹的第一種方式是,使用JMX來進行監控。
這種方式要求我們在啟動Java程式的時候手動開啟jmx remote功能。開啟的方式是使用下面的命令列引數啟動Java程式:
-Dcom.sun.management.jmxremote.port=<port> -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
這裡<port>是jxm remote使用的埠。大家可以隨意改成自己想要的埠。
假設我們要在10.2.3.4這臺機器上啟動一個Java程式foo.jar。那麼我們可以使用下面的方式來啟動程式。
java -Dcom.sun.management.jmxremote.port=40124 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -jar foo.jar
在這裡我們把埠設定成了40124。
接下來我們開啟jvisualvm,然後在Remote上點選右鍵,填上我們要監控的伺服器host: 10.2.3.4,點選OK。
接下來,我們在10.2.3.4上面右鍵選擇Add JMX Connection,把Connection資訊填成10.2.3.4:40124。這裡埠號就是我們之前啟動foo.jar時設定的埠號。
接下來,我們就可以檢視這個Java程式的資訊,並且可以執行諸如Thread Dump或者Heap Dump的操作。
有一點缺陷是,目前的jvisualvm無法直接把遠端的Java程式的heap dump到本地的機器上。當我們點選jvisualvm的heap dump時,只能把heap dump到遠端機器上的某臺目錄,然後還需要我們自己去把heap dump檔案拷貝到本地,再用jvisualvm開啟來分析。
當然有時候,我們在啟動程式時,沒有開發jmx remote功能,那麼這是不是就無法監控了呢?No。Java本身提供了jstat工具來幫助使用者查某個Java程式的執行資訊。同時,Java還提供了jstatd,來讓使用者可以遠端訪問jstat產生的資訊。
要使用jstatd的時候我們需要先建一個檔案jstatd.all.policy,內容如下:
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
接下里我們使用下面的命令來啟動jstatd(注意,啟動jstatd的使用者要求跟啟動Java程式的使用者一致,不然jstatd就沒有許可權訪問程式的資訊了):
jstatd -p 40123 -J -Djava.security.policy=jstatd.all.policy
這裡的40123是jstatd監聽的埠,也就是我們要連線時使用的埠,jstatd.all.policy就是我們剛才建立的檔案所在的路徑。
啟動之後,我們在10.2.3.4上右鍵,選擇Add jstatd Connection,填上埠號40123,然後點選OK。
接下來我們就可以看到這臺機器上所有的Java程式了(僅限啟動jstatd的使用者有許可權檢視的程式)。
當然jstatd有一定的侷限性,它只能檢視資訊,不能執行諸如Thread Dump和Heap Dump等操作。但是jstatd對於我們分析Java記憶體的狀態一般來說是足夠了。
如果可以的話,最好同時開啟JMX和jstatd。這樣可以看到更豐富的資訊。比如,只有JMX是看不到Main Class和Arguments等資訊的。
jvisualvm還有很多的功能,善用工具可以讓我們事半功倍。
相關文章
- jvisualvm遠端監控Linux下的tomcatLVMLinuxTomcat
- java-jvisualvm遠端監控阿里雲伺服器上的TomcatJavaLVM阿里伺服器Tomcat
- 使用Metrics方法級遠端監控Java程式Java
- 使用 Eclipse 遠端除錯 Java 應用程式(mark)Eclipse除錯Java
- 對映遠端埠到本地埠(用於伺服器tensorboard觀察)伺服器ORB
- 使用 jvisualvm 遠端監控服務 JVM (jmx+jstatd)方法(k8s容器版)LVMJVMJSK8S
- 使用RD Client來遠端桌面client
- 艾瑞疫期產業觀察:遠端辦公的機會與策略產業
- Java設計模式-觀察者模式Java設計模式
- 原來 Java 遠端除錯如此簡單Java除錯
- Java 設計模式之《觀察者模式》Java設計模式
- 使用Intellij IDEA遠端除錯Spark程式IntelliJIdea除錯Spark
- Java設計模式之(十二)——觀察者模式Java設計模式
- 淺識JAVA設計模式——觀察者模式Java設計模式
- Java常用設計模式之觀察者模式Java設計模式
- Java使用HttpClient實現遠端服務呼叫JavaHTTPclient
- 使用 Frp 和 Docker 通過遠端桌面和 SSH 來遠端控制 Windows(反向代理)FRPDockerWindows
- Angular SSR 和 PWA 結合起來使用的一些現象觀察Angular
- 觀察者模式-將訊息通知給觀察者模式
- 來一波原生的觀察者模式 | MutationObserver模式Server
- 遠見:2022巨量算數年度觀察報告(附下載)
- 觀察者模式模式
- 小白觀察:開源專案如何在雲端生存
- Laravel核心程式碼學習 — 觀察者模式Laravel模式
- Java中的設計模式(一):觀察者模式Java設計模式
- 17.java設計模式之觀察者模式Java設計模式
- 折騰Java設計模式之觀察者模式Java設計模式
- 觀察者Observer模型事件,使用注意情況Server模型事件
- 記一次觀察者模式的使用模式
- win10系統下如何使用遠端桌面連線命令來連線遠端桌面Win10
- 十一、論jvisualvm使用的重要性LVM
- Java進階 | 從整體上觀察物件導向Java物件
- 【程式碼簡述設計模式】----- 觀察者模式設計模式
- 使用Python程式碼遠端連線伺服器Python伺服器
- Unity——觀察者模式Unity模式
- PHP觀察者模式PHP模式
- Robotiq 單指觀察
- 觀察者模式(2)模式
- [20200224]觀察使用TCP keep-alive feature特性.txtTCPKeep-Alive