使用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監控Java程式(本地和遠端)LVMJava
- jvisualvm遠端監控Linux下的tomcatLVMLinuxTomcat
- 使用Metrics方法級遠端監控Java程式Java
- java-jvisualvm遠端監控阿里雲伺服器上的TomcatJavaLVM阿里伺服器Tomcat
- 使用RD Client來遠端桌面client
- 使用 Eclipse 遠端除錯 Java 應用程式Eclipse除錯Java
- 使用 Eclipse 遠端除錯 Java 應用程式(mark)Eclipse除錯Java
- 使用Metrics方法級遠端監控Java程式(優化)Java優化
- 原來 Java 遠端除錯如此簡單Java除錯
- 使用 jvisualvm 遠端監控服務 JVM (jmx+jstatd)方法(k8s容器版)LVMJVMJSK8S
- Java遠端呼叫Java
- 使用JVisualVM分析OOMLVMOOM
- 使用EJB遠端介面帶來的效能問題
- 使用 Frp 和 Docker 通過遠端桌面和 SSH 來遠端控制 Windows(反向代理)FRPDockerWindows
- win10系統下如何使用遠端桌面連線命令來連線遠端桌面Win10
- vnc程式, 遠端桌面VNCC程式
- 使用Intellij IDEA遠端除錯Spark程式IntelliJIdea除錯Spark
- Android程式使用SOAP呼叫遠端WebService服務AndroidWeb
- 艾瑞疫期產業觀察:遠端辦公的機會與策略產業
- java透過ip獲取遠端伺服器cpu使用率的程式碼Java伺服器
- 什麼是rdp遠端桌面?如何使用rdp遠端桌面?
- 什麼是rd遠端桌面?如何使用rd遠端桌面?
- 遠端部署python程式Python
- 使用git建立遠端倉庫,讓別人git clone下來Git
- 如何使用rdp遠端桌面
- 遠端重啟命令使用
- Git 使用遠端倉庫Git
- 使用GitBash從Git遠端倉庫下載程式碼Git
- 使用Python程式碼遠端連線伺服器Python伺服器
- 使用遠端控制操作遠端xp sp2的問題
- 工作未來式:從遠端到混合
- Java高效開發-遠端debugJava
- java Remote Debug(遠端除錯)JavaREM除錯
- java遠端提交表單問題Java
- Oracle ASM使用asmcmd中的cp命令來執行遠端複製OracleASM
- 對映遠端埠到本地埠(用於伺服器tensorboard觀察)伺服器ORB
- 用WinDBG遠端除錯程式除錯
- 遠端程式碼載入方案