使用Visual VM 查看linux中tomcat運行時JVM記憶體__linux

來源:互聯網
上載者:User

前言:在生產環境中經常發生伺服器記憶體溢出,假死或者線程死結等異常,導致服務不可用。我們經常使用的解決方案是通過分析錯誤日記,然後去尋找代碼到底哪裡出現了問題,這樣的方式也許會奏效,但是排查起來耗費時間比較多,或者說本身代碼本身就沒有錯,而是訪問量大時候消耗記憶體太多,垃圾對象沒有及時回收等等其他情況導致的,這樣排查異常起來異常困難,那麼有沒有一些可視化的工具,協助我們可以詳細地查看當前應用服務的記憶體情況,從而為我們在解決異常、最佳化代碼、最佳化服務等方面提供一些建議呢。幸好,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已經完畢,謝謝大家的查看。。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.