對於對應用的監控上可使用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內存滿的一個量級等。
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的資源,以及線程的狀態,如圖所示:
而後將會跳轉到對應的下圖所示的頁面中:
點擊對應的所須要安裝的tool(工具),將會下載到你的本地中,最後,在對應的VisualVM中,插件->工具中,選擇「已下載」的tab,而後點擊添加插件後,選擇對應的已下載的插件點擊安裝便可。
除此以外,Mbean以及Btrace(調試代碼的插件)等插件,還有JDK的JConsole的工具,也是很ok的,只是做用的方向不同,Jconsole能夠更加動態的看到堆內存的折線圖等。
遠程服務開啓JMX,用於VisualVM 和 Jconsole鏈接
在對應的服務啓動的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 查看目錄下文件總量