前言:在生產環境中經常發生伺服器記憶體溢出,假死或者線程死結等異常,導致服務不可用。我們經常使用的解決方案是通過分析錯誤日記,然後去尋找代碼到底哪裡出現了問題,這樣的方式也許會奏效,但是排查起來耗費時間比較多,或者說本身代碼本身就沒有錯,而是訪問量大時候消耗記憶體太多,垃圾對象沒有及時回收等等其他情況導致的,這樣排查異常起來異常困難,那麼有沒有一些可視化的工具,協助我們可以詳細地查看當前應用服務的記憶體情況,從而為我們在解決異常、最佳化代碼、最佳化服務等方面提供一些建議呢。幸好,jdk為我們免費提供一個這樣的視覺化檢視,VisualVM,當然市場上還有一些商業或免費的其他類似工具,如JProfiler、JConsole等。下面我就介紹介紹,如何在window環境下,使用Visual VM串連Linux環境上的部署在tomcat上的web應用。
1、環境準備和說明
win7
jdk1.6.0_31
tomcat6
linux centos
本地的VisualVM要串連遠端JVM,需要進行相關的配置,VisualVM主要是通過JMX和jstatd兩種方式進行遠端連線的。
JMX串連可以查看系統資訊,CPU使用方式,線程多少時間軸,手動執行記憶體回收等比較偏於系統級層面的資訊。
jstatd串連方式可以提供JVM記憶體分布詳細資料,記憶體回收分布圖、線程詳細資料,甚至可以看到某個對象使用記憶體的大小。
因此想查看遠端JVM的具體資訊,最好兩種方式都進行配置串連。
2、JMX串連的配置
在tomcat的bin/startup.sh中的末尾加入如下配置,這樣該tomcat下 的web應用都可以通過VisualVM的JMX方式串連
export CATALINA_OPTS="$CATALINA_OPTS-Dcom.sun.management.jmxremote=true-Djava.rmi.server.hostname=19.129.251.16 -Dcom.sun.management.jmxremote.port=8099-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false"
hostname:tomcat所在的Linux伺服器的地址
port:暴露的訪問連接埠,不能和其他連接埠重複
添加後的效果圖:
配置完畢後啟動tomcat,看能不能訪問上面配置的地址10.5.227.81:8999
使用telnet成功,說明地址是可以訪問的,如果不能,則需要排查網路環境
a、遠程Linux伺服器的地址10.5.227.81和你的機器的聯通性,使用ping命令看通不通
b、查看防火牆的是否限制了該連接埠的訪問
如果上述步驟沒有出現問題,那麼你已經接近成功一大半
接下來在本地機器上開啟jdk/bin/jvisualvm.exe,如圖是visual VM的開始頁面
建立一個遠端連線,”遠程”右鍵–>”添加遠程主機”,輸入上述配置的伺服器位址,Djava.rmi.server.hostname=10.5.227.81
選擇添加的主機,右鍵–>”添加JMX串連”,輸入上面配置的連接埠8999,-Dcom.sun.management.jmxremote.port=8999
JMX串連成功後,你已經可以查看JVM的參數,如堆棧大小等JVM相關參數,查看伺服器cpu消耗情況,手動執行記憶體回收、匯出堆dump鏡像,查看類、線程的總數和分布情況等許可權
3、jstatd串連的配置
如果想看看jvm的記憶體各個分區的使用方式,哪些線程,變數使用記憶體的詳細情況,還需要建立jstatd串連。在tomcat下(或者某個路徑下,下面用到時指定絕對路徑就行)建立檔案jstatd.java.policy,該檔案主要是用於授予VisualVM遠端連線的許可權,裡面內容如下
grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; };
建立jstatd.java.policy 後的效果圖如下:
在Linux服務視窗執行下面命令
[root@qgserver ~]# jstatd -J-Djava.rmi.server.hostname=10.5.227.81 -J-Djava.security.policy=/data/tomcat6-fssmyx/jstatd.java.policy
10.5.227.81是Linux伺服器的ip地址,同上面。
jstatd.java.policy就是上面建立的檔案,注意要指定絕對路徑,我的是放在/data/tomcat6-fssmyx/,根據實際情況配置。
執行成功後,Visual VM中自動建立的jstatd串連,可以看到這台機上所有的tomcat,找到自己需要查看的tomcat web服務
開啟VIsual GC選項卡可以看到tomcat的記憶體使用量分布圖,永久區、老年代、新生代的使用方式、記憶體回收的資訊。要使用更多工具查看JVM,可以通過 ‘工具’-> ‘外掛程式’安裝更多工具
到此,使用本地的VisualVM查看遠端JVM已經完畢,謝謝大家的查看。。