JVM問題排查也不是很難--工具使用

目錄

  • 概述
  • 環境準備
  • 工具介紹
  • 遠程鏈接方式
  • 開啓JMX
  • 工具遠程鏈接
  • 參考文獻

概述

    線上環境中,程序愈來愈慢,一頭霧水?遇到程序常常宕機,但找不到緣由?排查問題卻常常記不住命令? 那是沒找到好的方法而已,本文將介紹一下JVM問題排查工具的使用, 工具僅僅是工具,仍是須要知道一些JVM知識才能夠看懂工具中的參數喲..html

 轉帖請註明原貼地址: https://my.oschina.net/u/2342969/blog/2987769java

環境準備

  • centos 7
  • JDK1.8(6 or 7)
  • 可運行java應用

工具介紹

    jdk自帶的可視化排查工具備jconsole和jvisualvm兩個,兩款工具各有千秋,下面簡單說一下博主對兩款工具的選擇spring

  • 查看線程死鎖問題優先選用的jconsole, why? 由於它有一個檢查死鎖的按鈕能夠操做.
  • 堆和線程dump選用的jvisualVM,why? 由於它有對應功能的按鈕能夠點擊
  • 其餘場景均使用的jvisualVM

注意:它們均位於 ${JAVA_HOME}/bin 下面centos

遠程鏈接方式

    因爲線上服務器是沒有可視化界面的,使用可視化工具是沒有任何效果的,基本是本地啓動工具,遠程監控服務器的jvm。安全

醬紫就會涉及到如何遠程鏈接jvm,遠程鏈接的方式有兩種,jstatd和jmx。本文將只介紹jmx鏈接方式,由於jstatd鏈接會有權限問題,有一些功能沒法正常使用服務器

開啓JMX

    如今java應用基本spring boot大一統,下面將介紹一下spring boot應用採用JMX遠程監控JVM的方式。oracle

通常spring boot應用啓動命令以下(線上確定須要配一些jvm參數,這裏再也不贅述):app

java -Xms500m -Xmx1024m -jar /opt/spring-boot-test.jar --Dspring.profiles.active=test --Dserver.port=8181

啓動jmx的啓動方式以下:jvm

java -Xms500m -Xmx1024m -Dcom.sun.management.jmxremote.port=3333 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -jar /opt/spring-boot-test.jar --Dspring.profiles.active=test --Dserver.port=8181

-Dcom.sun.management.jmxremote.port: jmx遠程端口tcp

-Dcom.sun.management.jmxremote.ssl: 是否開啓ssl認證

-Dcom.sun.management.jmxremote.authenticate:是否開啓ssl認證

本文僅僅簡單演示,如需更多安全配置,請查閱參考文獻

注意:這樣子開啓後,仍然會沒法鏈接

遠程鏈接時會報錯: 沒法使用 service:jmx:rmi:///jndi/rmi://192.168.1.104:3333/jmxrmi 鏈接到 172.16.0.140:3333

報錯緣由是:jmx除了遠程端口外,還監聽了其餘端口,經過命令查看其餘監聽端口

查看應用進程號:

#ps aux|grep spring-boot-test

根據應用進程號,查看監聽端口

#netstat -antup|grep <pid>

如圖能夠看到,除了遠程端口3333外,還監聽了40639和36677兩個端口, 因此須要開放這兩個端口,本文使用的centos 7 默認防火牆使用的firewalld,其餘防火牆自行查閱資料開啓端口

#firewall-cmd --zone=public --add-port=40639/tcp --permanent
#firewall-cmd --zone=public --add-port=36677/tcp --permanent
#firewall-cmd --zone=public --add-port=3333/tcp --permanent
#firewall-cmd --reload

工具遠程鏈接

jconsole遠程鏈接

啓動jconsole

#${JAVA_HOME}/bin/jconsole

點擊鏈接,正常鏈接了就會出現下圖,如未正常出現,再詳細對比上面步驟

jvisualvm遠程鏈接

啓動jvisualvm

#${JAVA_HOME}/bin/jvisualvm

正常啓動就會出現上圖,下面開始進行遠程鏈接

添加JMX遠程鏈接

進入此頁面點擊監控就能夠看到JVM活動狀況,如未出現監控信息,請根據以上步驟依次排查

參考文獻

文獻來自oracle官網java文檔,地址隨時可能變化喲

https://docs.oracle.com/javase/8/docs/technotes/guides/visualvm/applications_remote.html

https://docs.oracle.com/javase/8/docs/technotes/guides/visualvm/jmx_connections.html

相關文章
相關標籤/搜索