這篇文章主要介紹“分析Java生產(chǎn)環(huán)境下問題排查思路”,在日常操作中,相信很多人在分析Java生產(chǎn)環(huán)境下問題排查思路問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”分析Java生產(chǎn)環(huán)境下問題排查思路”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
Java生產(chǎn)環(huán)境下問題排查
在生產(chǎn)環(huán)境中,我們無法通過斷點(diǎn)調(diào)試、新增log、可視化工具去立馬查看當(dāng)前的運(yùn)行狀態(tài)和拿到錯(cuò)誤信息,此時(shí),借助Java自帶的命令行工具以及相關(guān)dump分析工具以及一些小技巧,可以大大提升我們排查問題的效率。
運(yùn)行參數(shù)
下面會(huì)列出一些常用且非常有效的命令以及參數(shù)來查看運(yùn)行時(shí)Java程序的信息,從而輔助你了解程序運(yùn)行狀態(tài)。
查看JVM參數(shù)
jps -l 查看所有正在運(yùn)行的Java程序,同時(shí)顯示啟動(dòng)類類名,獲取到PID。
4706 org.apache.catalina.startup.Bootstrap
5023 sun.tools.jps.Jps
jinfo -flags PID 查看運(yùn)行時(shí)進(jìn)程參數(shù)與JVM參數(shù)
Attaching to process ID 28987, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.171-b11
Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=132120576 -XX:MaxHeapSize=2092957696 -XX:MaxNewSize=697303040 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=44040192 -XX:OldSize=88080384 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC
Command line: -Dspring.config.location=application.properties -Dspring.profiles.active=staging
java -XX:+PrintFlagsFinal -version 查看當(dāng)前虛擬機(jī)默認(rèn)JVM參數(shù)
查看即時(shí)GC狀態(tài)
jstat -gc PID 1000 10 每秒查看一次gc信息,共10次,輸出比較多的參數(shù)。
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
512.0 512.0 15.3 0.0 4416.0 1055.2 11372.0 7572.5 14720.0 14322.5 1664.0 1522.8 40 0.137 8 0.039 0.176
期間可能碰到提示sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versions are 24.181-b01. Target VM is 25.171-b11的問題,原因在于安裝了多個(gè)版本,使用which、ls -l可簡(jiǎn)介定位到與當(dāng)前執(zhí)行Java程序相同的Java版本。
錯(cuò)誤排查
內(nèi)存問題
內(nèi)存泄露導(dǎo)致OOM?內(nèi)存占用異常的高?這是生產(chǎn)環(huán)境常常出現(xiàn)的問題,Java提供dump文件供我們對(duì)內(nèi)存里發(fā)生過的事情進(jìn)行了記錄,我們需要借助一些工具從中獲取有價(jià)值的信息。
導(dǎo)出Dump文件
提前對(duì)Java程序加上這些參數(shù)印dump文件 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./
對(duì)正在運(yùn)行的程序使用jmap:jmap -dump:format=b,file=heap.hprof PID
分析Dump文件
如果Dump文件不太大的話,可以傳到指定渠道來分析。文件比較大,且想進(jìn)行更加系統(tǒng)的分析,推薦使用MAT分析,有如下幾種常用查看方式:
首頁(yè)中的【Leak Suspects】能推測(cè)出問題所在;
點(diǎn)擊【Create a histogram from an arbitrary set of objects】查到所有對(duì)象的數(shù)量;
右鍵點(diǎn)擊某個(gè)對(duì)象【Merge Shortest Paths to GC Roots】-> 【exclude all phantom/weak/soft etc. references】能查詢到大量數(shù)量的某個(gè)對(duì)象是哪個(gè)GC ROOT引用的。
線程問題
任務(wù)長(zhǎng)時(shí)間不退出?CPU 負(fù)載過高?很可能因?yàn)樗姥h(huán)或者死鎖,導(dǎo)致某些線程一直執(zhí)行不被中斷,但是不報(bào)錯(cuò)是最煩人的,所以日志里看不到錯(cuò)誤信息,并且又不能用dump文件分析,因?yàn)楦鷥?nèi)存無關(guān)。這個(gè)時(shí)候就需要用線程分析工具來幫我們了。
導(dǎo)出jstack文件
使用jstack PID > 文件,如果失敗請(qǐng)加-F參數(shù),如果還失敗請(qǐng)使用Java程序啟動(dòng)時(shí)使用的用戶執(zhí)行jstack,下面是jstack的部分輸出格式:
線程名 PID的16進(jìn)制
"http-nio-8080-Acceptor-0" #17 daemon prio=5 os_prio=0 tid=0x00007fac2c4bd000 nid=0x29f4 runnable [0x00007fac192f6000]
java.lang.Thread.State: RUNNABLE(tomcat的工作線程正在運(yùn)行,有NEW/RUNNABLE/BLOCKED/WAITING/TIMED_WATING/TERMINATED狀態(tài))
at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422)
at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250)
- locked<0x00000000faf845a8>(a java.lang.Object)
at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:682)
at java.lang.Thread.run(Thread.java:748)
jstack的輸出可以看到所有的線程以及他們的狀態(tài),我們就可以看有哪些我們自己創(chuàng)建的正在運(yùn)行的線程,那很可能就是那個(gè)一直在執(zhí)行的線程了,此時(shí)線程名就格外重要了,所以建議創(chuàng)建新線程時(shí)指定有意義的線程名。當(dāng)然,通過PID查找也非常方便。
到此,關(guān)于“分析Java生產(chǎn)環(huán)境下問題排查思路”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
文章題目:分析Java生產(chǎn)環(huán)境下問題排查思路-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)路徑:http://chinadenli.net/article26/ehccg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、全網(wǎng)營(yíng)銷推廣、品牌網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、App設(shè)計(jì)、域名注冊(cè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容