簡介:
VisualVM,能夠監控線程,內存情況,查看方法的CPU時間和內存中的對 象,已被GC的對象,
反向查看分配的堆棧(如100個String對象分別由哪幾個對象分配出來的)。
VisualVM使用簡單,幾乎0配置,功能還是比較豐富的,幾乎囊括了其它JDK自帶命令的所有功能
內存信息
線程信息
Dump堆(本地進程)
Dump線程(本地進程)
打開堆Dump。堆Dump可以用jmap來生成。
打開線程Dump
生成應用快照(包含內存信息、線程信息等等)
性能分析。CPU分析(各個方法調用時間,檢查哪些方法耗時多),內存分析(各類對象占用的內存,檢查哪些類占用內存多
如何獲取VisualVM:
VisualVM 的一個最大好處就是,它已經在你的 JDK bin 目錄里了,只要你使用的是 JDK1.6 Update7 之后的版本。點擊一下 jvisualvm.exe 圖標它就可以運行了
查看本地進程
查看CPU、內存、類、線程運行信息
查看線程詳情
也可以點擊右上角Dump按鈕,將線程的信息導出,其實就是執行的jstack命令
抽樣器可以對CPU、內存在一段時間內進行抽樣,以供分析
cpu抽樣
VM工具遠程連接
VisualJVM不僅是可以監控本地jvm進程,還可以監控遠程的jvm進程,需要借助於JMX技術實現。
什么是JMX?
JMX(Java Management Extensions,即Java管理擴展)是一個為應用程序、設備、系統等植入管理功能的框架。
JMX可以跨越一系列異構操作系統平台、系統體系結構和網絡傳輸協議,靈活的開發無縫集成的系統、網絡和服務管理應用。
監控遠程的Tomcat
想要監控遠程的tomcat,就需要在遠程的tomcat進行對JMX配置,方法如下:
注意:要將該的配置放在catalina.sh的上面,否則將無法創建JMX連接
JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=6666 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
Tomcat解壓目錄的bin目錄中的catalina.sh文件,加入如上配置隨便找個位置就行
添加成功后監測遠程JVM
GC專題
1.什么是垃圾回收
程序運行會產生各種各種的數據,那么這些數據存在於內存當中,這些數據不可能是永久存在的,無效的資源對象需要進行垃圾回收,釋放內存
2.不同的編程語言都有GC垃圾回收
java語言自帶GC垃圾回收器,並且有JVM自動進行垃圾回收,程序員主要關注代碼實現,不關注垃圾回收 System.gc();C/C++語言當中,程序員new一個對象,相當於申請了一塊內存,如果需要釋放資源得手動通過delete關鍵字進行內存的釋放
3.垃圾回收算法
如果使用的算法不合理,反倒會造成資源的浪費,垃圾回收常見算法
3.1 引用計數法
原理:假如有一個對象A,任何對象對A對象的引用,計數器就+1,當引用失效或者失敗時計數器-1,如果對象A的計數器為0,GC就會當成對象沒有引用了,就會將該對象回收
3.2 標記清除法
標記:從根節點開始標記引用對象
清除:未被標記的對象就是垃圾對象,可以清除
原理:初始狀態下所有對象的標記都為0,當內存不足的情況下,
標記階段:GC先會進行標記階段,從根節點開始,凡是引用的對象都標記為1,其他沒有引用的對象標記為0
清除階段:凡是對象標記為1代表該對象存在引用不清除,對象標記為0則清除,清除完畢之后所有對象重新標記為0
缺點:
1.效率較低,標記和清除兩個動作都需要遍歷所有的對象,並且在GC時,需要停止應 用程序,對於交互性要求比較高的應用而言這個體驗是非常差的。
2.碎片化較為嚴重,可能導致大數據沒有辦法存儲,小數據存儲浪費空間
3.3 標記壓縮算法
同標記清除法相同,標記過程相同,在清除過程中,先將垃圾對象壓縮到內存末尾,然后再清除
缺點:
對象需要移動,效率有一些影響
3.4 復制算法
內存被分為大小相同兩塊區域,一塊為From,一塊為To,程序向From區域存放數據,當from數據即將滿了的情況下,進行垃圾回收:首先標記垃圾對象,然后將沒有標記的對象復制到To當中,然后回頭將From所有區域清空,然后角色交換,From和To交換,保證To永遠為空
1.年輕代當中分為Eden去和From和To區,其中From和To區的大小時相同的,程序向Eden去和From區存放數據,當數據即將滿了的情況下
2.Eden區會將活躍對象存放到To區,From區會將年齡小的對象存放到To區,那么年齡大的存放到Old年老代區域當中
3.清空Eden去和Old區的所有數據,然后將From區角色和To區角色互換,這樣保證To區為空
4.當垃圾回收機制反復運行時,那么To區可能數據飽和,如果數據飽和則將所有對象轉移到Old年老區
3.5 分代算法
合適的垃圾回收對象沿用合適的算法,在JVM當中年輕代適合復制算法,年老代可以標記清除發,或者標記壓縮算法