一、jstack jstack能夠告訴你當前全部JVM線程正在作什麼,包括用戶線程和虛擬機線程,你能夠用它來查看線程棧,而且結合Lock信息來檢測是否發生了死鎖和死鎖的線程。nginx
沒事兒jstack一下,知道你的小夥伴正在作什麼。git
另外在用top -H看到佔用CPU很是高的pid時,能夠轉換成16進制後在jstack dump出來的文件中搜索,看看究竟是什麼線程佔用了CPU。github
二、jstat stat,顧名思義就是提供一些統計信息,它能夠告訴你當前的GC狀況,包括GC次數、時間,具體的GC還能夠結合gc.log文件去分析。服務器
通常來講,咱們用jstat去查看GC狀況,判斷是否存在YGC或FGC頻繁的狀況,再去看gc.log和jamp dump內存,MAT分析來定位問題(後面會有一個case針對這種場景)。網絡
經常使用的用法是jstat -gcutil pid time_intervaleclipse
三、jmap 排查GC問題必然會用到的工具,jmap能夠告訴你當前JVM內存堆中的對象分佈及其關係,當你dump堆以後能夠用MAT分析,看看有哪些大對象,或者哪些類的實例特別多。tcp
經常使用用法:工具
強制FGC:-histo:live性能
dump堆:-dump:[live],format=b,file=dump.binui
查看各代內存佔用狀況:-heap
而後咱們來介紹一些開源的工具,來加強JVM工具自己的做用。
一、MAT(Eclipse Memory Analyzer) GC分析必備,用於分析jmap或OOM時dump出來的內存快照,能夠看到對象和引用關係。
官方地址:http://www.eclipse.org/mat/
二、top 這個是Linux自帶的命令,查看系統資源消耗狀況,能夠看看CPU、內存、SWAP、I/O的消耗狀況,須要特別注意的有幾個值:
ni,這個值若是特別高說明線程上下文切換開銷較大,看看是否是開了太多的線程致使的
res,這個表明了進程實際佔用的內存
swap,內存不足就會佔用swap空間,這個時候通常應用的性能會急劇降低,須要特別關注
三、HouseMD 一個相似於BTrace的工具,用於對JVM運行時的狀態進行追蹤和診斷,做者是中間件團隊的聚石。
一般咱們排查問題不少時候都在代碼中加個日誌,看看方法的參數、返回值是否是咱們指望的,而後編譯打包部署重啓應用,十幾分鍾就過去了。HouseMD能夠直接讓你能夠追蹤到方法的返回值和參數,以及調用次數、調用平均rt、調用棧。甚至是類的成員變量的值、Class加載的路徑、對應的ClassLoader,均可以用一行命令給你展示出來,堪稱神器。
更多的用法能夠參考詳細的WiKi:https://github.com/CSUG/HouseMD
再偷偷告訴你,由於HouseMD是基於字節碼分析來作的,因此理論上運行在JVM的語言均可以用它,包括Groovy,Clojure均可以。
四、TBJMap 經過jmap和MAT咱們能夠知道整個JVM堆的對象分佈狀況,可是有時候咱們須要知道young/old/perm區分別有哪些對象的時候,就要用到TBJMap這個神器了。做者是中間件團隊的叔同。
他能夠告訴你各個分代區各個Class的實例數、佔用的空間,以及DirectMemory佔用的空間等。
用法很簡單,一行命令便可。WiKi:https://github.com/alibaba/TBJMap
五、tsar tsar是淘寶的採集工具,主要用來收集服務器的系統信息(如cpu,io,mem,tcp等)以及應用數據(如squid haproxy nginx等),tsar支持t實時查看和歷史查看,方便了解應用和服務器的信息。
Usage: tsar [options] Options: -check display last record for alert –check/-C display last record for alert.example:tsar –check / tsar –check –cpu –io –cron/-c run in cron mode, output data to file –interval/-i specify intervals numbers, in minutes if with –live, it is in seconds –list/-L list enabled modules –live/-l running print live mode, which module will print –file/-f specify a filepath as input –ndays/-n show the value for the past days (default: 1) –date/-d show the value for the specify day(n or YYYYMMDD) –merge/-m merge multiply item to one –detail/-D do not conver data to K/M/G –spec/-s show spec field data, tsar –cpu -s sys,util –help/-h help Modules Enabled: –cpu CPU share (user, system, interrupt, nice, & idle) –mem Physical memory share (active, inactive, cached, free, wired) –swap swap usage –tcp TCP traffic (v4) –udp UDP traffic (v4) –traffic Net traffic statistics –io Linux I/O performance –pcsw Process (task) creation and context switch –partition Disk and partition usage –tcpx TCP connection data –load System Run Queue and load average
用不一樣的參數能夠看到歷史和實時信息,CPU、Load、內存、網絡、QPS、rt等等你想要的監控數據幾乎都能看到。
目前tsar已經開源:http://tsar.taobao.org/