1、前言
開發大型 Java 應用程序的過程中難免遇到內存泄露、性能瓶頸等問題,比如文件、網絡、數據庫的連接未釋放,未優化的算法等。隨着應用程序的持續運行,可能會造成整個系統運行效率下降,嚴重的則會造成系統崩潰。爲了找出程序中隱藏的這些問題,在項目開發後期往往會使用性能分析工具來對應用程序的性能進行分析和優化。
VisualVM 是一款免費的性能分析工具。它通過 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多種方式從程序運行時獲得實時數據,從而進行動態的性能分析。同時,它能自動選擇更快更輕量級的技術儘量減少性能分析對應用程序造成的影響,提高性能分析的精度。
2、jvisualvm的安裝
從官網下載https://visualvm.github.io/download.html,無需安裝,直接解壓放置於本地文件系統即可(如果放置於遠程服務器,也可以實現遠程服務器本地監控jvm)。
3、遠程服務器配置JXM(也可以使用jstatd連接到遠程)
1)第一步
在遠程服務器上的JDK根目錄下的/jre/lib/management文件夾下,將jmxremote.password.template文件複製一份jmxremote.password,然後打開jmxremote.password文件。
#monitorRole QED
#controlRole R&D
將裏面的這兩行註釋去掉,monitorRole和controlRole就是用戶名,QED和R&D分別是密碼。
2)第二步
修改啓動參數:修改tomcat中bin文件夾catalina.sh文件,增加如下語句(jar包啓動的項目,也可以在jar命令後面增加類似如下語句):
JAVA_OPTS="-Djava.rmi.server.hostname=192.168.240.131 -Dcom.sun.management.jmxremote.port=1100 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
說明:hostname就是主機的地址,port就是端口號,請確認這個端口號不要被佔用;ssl就是要不要加密,我這裏鏈接的開發環境就不加密了;authenticate就是要不要用戶認證,賬號密碼就是上一步中配置的。
3)第三步
關閉防火牆:運行完程序之後關閉服務器的防火牆,有很多教程都是讓把上一步中設置的端口號打開,但是其實,JXM還需要監聽兩個隨機的接口。要不直接關了防火牆,要不就把使用到的端口都打開。
4、配置jvisualvm
1)添加jmx連接
登錄成功後如下圖所示:
查看內容:
內存和cpu數據:
線程情況:
參考文章:
https://www.ibm.com/developerworks/cn/java/j-lo-visualvm/
https://zhuanlan.zhihu.com/p/20708140
https://zhuanlan.zhihu.com/p/24632285
https://www.cnblogs.com/gossip/p/6141941.html