3 - JVM隨筆分類(gc.log ,VisualVM外掛介紹,VisualVM遠端連線方式介紹)
對於對應用的監控上可以使用Jdk自帶的VisualVM來做視覺化監控,可以檢視當前服務應用程序的堆大小的走向,以及類的載入數量等,除此之外,VisualVM可以支援很多的視覺化的外掛新增,在對應的工具->外掛一欄,此處通過修改預設的外掛中心的連結後( https://blog.csdn.net/keketrtr/article/details/74448127 )下載了對應的Visual GC外掛(如圖2),可以檢視對應的JVM的老年代,Eden,Surivor等記憶體區域的物件記憶體走向,。所以通過VisualVM基本已經可以獲取應用的一個基本的記憶體使用走向,如果需要知道當前堆記憶體中所載入的最大的類的一些更詳細的資訊,則需要拉出來dump檔案,在mat裡面做下分析,可以得到對應的結果,或者使用jstat -gc 的命令或者jmap的命令可以檢視對應的分割槽和物件個數的使用情況等( https://www.jianshu.com/p/bb9e48cc77ce ),還要一個是gchisto專門可以做gc.log日誌的分析工具,在上面第一個URL中也有介紹,使用gchisto的好處是,除了可以人工的詳細的分析gc.log日誌外,gchisto也可以add新增日誌進行分析 統計出對應的gc次數,Minor GC次數和Full GC的次數等以及消耗的時間和百分比等。,還有一個是美團的一個對應的監控工具等,也是可以參考的,後續再查下相關文章後,再思考後,再做下相關記錄,
圖1:
圖2:
除了上面提到的VisualGC外,VIsualVM還包含很多其他的外掛,簡單做一些介紹,
VisualGC:在VisualVM中使用VIsualGC主要是可以清晰的GC日誌的整體統計資訊,如Eden區的清理次數,Eden區域GC清理時總的耗費時間,以及可以動態看到堆記憶體中Eden區等各個區域整體的遞增情況,多長時間會到達一個Eden記憶體滿的一個量級等。
關於VisualGC的引數介紹可以參考: https://www.cnblogs.com/reycg-blog/p/7805075.html
JConsole Plugins:VisualVM中可以新增Jconsole Plugins的外掛,Jconsole Plugins外掛可以通過新增Jtop jar包的方式增加監控方式,如下; https://lixjluck.iteye.com/blog/713782 ,也可以開啟對應的JDK1.6\demo\management\JTop下的README.txt檢視對應的Jtop介紹,此處簡單提一下,增加了Jtop的監控方式後,可以顯示對應的執行緒所佔用CPU的資源,以及執行緒的狀態,如圖所示:
上述的外掛新增JConsole Plugins等的方式除了最上面所提到的外掛搜尋的方式外,也可以通過離線模式下安裝外掛,還是在對應的 https://visualvm.github.io/pluginscenters.html visualVM的外掛中心中,開啟想要新增的jdk的版本的外掛,點選對應的指定版本的url連結:
點選對應的所需要安裝的tool(工具),將會下載到你的本地中,最後,在對應的VisualVM中,外掛->工具中,選擇“已下載”的tab,然後點選新增外掛後,選擇對應的已下載的外掛點選安裝即可。
除此之外,Mbean以及Btrace(除錯程式碼的外掛)等外掛,還有JDK的JConsole的工具,也是很ok的,只是作用的方向不一樣,Jconsole可以更加動態的看到堆記憶體的折線圖等。
遠端服務開啟JMX,用於VisualVM 和 Jconsole連線
https://blog.csdn.net/jek123456/article/details/80431486
https://www.cnblogs.com/think-in-java/p/6138439.html
在對應的服務啟動的JVM配置引數上,新增如下引數:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.port=22222
其中port表示對應的連結埠,上述JVM連結方式為非安全憑證直接登入的方式,如果需要再JvisualVM新增JMX的遠端連線時使用安全憑證,賬戶和密碼登入時,則可以參考第二個連結的設定方式,如果涉及到對應的防火牆埠開啟的問題也可參考第二個URL連結
在正常開啟了JMX連結後,使用Jconsole和JvisualVM都可以使用 新增JMX的連結方式 進行連線。
開啟JVM的Jstatd服務,使其VisualGC可以正常支援GC監控
-
在對應的JDK的bin目錄下新增 jstatd.all.policy 檔案,
-
新增對應的policy檔案後,在對應的bin目錄下,執行Jstatd服務,如下方式( ./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi. server .hostname= 192.168 .134 .128 -p 3333 -J-Djava.rmi. server .logCalls= true )
-
其中 hostname=**** 表示當前服務的IP地址,-p 3333 表示連結該Jstatd的埠,其中 -J-Djava.rmi.server.logCalls=true 表示開啟日誌輸出,在客戶端連結該Jstat服務時,將會有日誌輸出,可以進行方便排錯等,當然也可以不設定該引數,則預設為不輸出日誌
-
在開啟了 Jstatd的服務後,此時則不能使用Ctrl +C 的快捷鍵,因為Ctrl +C 後,則表示直接停止到服務,所以這也意味著該服務程序是必須持續開啟的狀態,(可以檢視下相關資料,是否可以持續化程序開啟,而不是隨著控制檯的退出而程序關閉等,或者將Jstatd的服務開啟程序直接根據Java服務執行時直接跟隨開啟,在對應Options引數中,開啟Jstatd程序等,是否OK,但目前是開啟Jstat程序後,新開一個新的Sheel視窗來進行其他的命令操作,而上個開啟Jstatd服務程序的視窗則暫不保持關閉即可)
-
開啟了對應的Jstat服務後,可以通過 lsof -i : port(埠) 和 netstat -anp|grep *jstatd 的方式來檢視該埠是否正常開啟和監控狀態
具體的新增,jstatd.all.policy檔案後,所新增的相關程式碼的介紹,可以參考下面的幾個連結,
在啟動了對應的jstatd的服務程序後,可以在VisualVM的遠端主機上,右鍵點選 “新增Jstatd連結”的方式進行遠端的Jstatd的連結,需要注意的是,開啟且VisualVM連結了對應的Jstatd的服務監控程序後,需要重新開啟上述所連結的JMX的監控連結後,就可以看到該監控連結中的Visual GC的展示監控頁面了。
ll | wc -l 檢視目錄下檔案總量
https://blog.csdn.net/liupeifeng3514/article/details/78998161