[轉]Java線上問題排查思路及Linux常用問題分析命令學習文章

Java線上問題排查思路及Linux常用問題分析命令學習

前言

之前線上有過一兩次OOM的問題,但是每次定位問題都有點手足無措的感覺名惩,剛好利用星期天驰怎,以測試環(huán)境為模版來學習一下Linux常用的幾個排查問題的命令刃泡。?

也可以幫助自己在以后的工作中快速的排查線上問題潦俺。

jmap命令

jmap -heap pid 輸出當前進程 JVM 堆新生代、老年代狼牺、持久代等請情況羡儿,GC 使用的算法等信息?

jmap -histo:live {pid} | head -n 10 輸出當前進程內(nèi)存中所有對象包含的大小??

jmap -dump:format=b,file=/usr/local/logs/gc/dump.hprof {pid} 以二進制輸出檔當前內(nèi)存的堆情況,然后可以導入 MAT 等工具進行

1是钥、 jmap -heap pid

輸出當前進程JVM堆新生代掠归、老年代、持久代等情況悄泥,GC使用的算法等信息虏冻。?

2、jmap -histo:live {pid} | head -n 10 輸出當前進程內(nèi)存中所有對象包含的大小

輸出當前進程內(nèi)存中所有對象實例數(shù) (instances) 和大小 (bytes), 如果某個業(yè)務對象實例數(shù)和大小存在異常情況弹囚,可能存在內(nèi)存泄露或者業(yè)務設計方面存在不合理之處厨相。?

jmap -dump:

命令如下:?

mkdir logs?

jmap -dump:format=b,file=/tmp/logs/dump.hprof {pid}

-dump:formate=b,file= 以二進制輸出當前內(nèi)存的堆情況至相應的文件,然后可以結合 MAT 等內(nèi)存分析工具深入分析當前內(nèi)存情況鸥鹉。?

也可以通過JVM參數(shù)配置OOM時自動dump當前內(nèi)存鏡像文件蛮穿。 -XX:+HeapDumpOnOutOfMemoryError 和-XX:HeapDumpPath所代表的含義就是當程序出現(xiàn)OutofMemory時,將會在相應的目錄下生成一份dump文件毁渗,而如果不指定選項-XX:HeapDumpPath則在當前目錄下生成dump文件践磅。?

確保應用發(fā)生 OOM 時 JVM 能夠保存并 dump 出當前的內(nèi)存鏡像。?

當然灸异,如果你決定手動 dump 內(nèi)存時音诈,dump 操作占據(jù)一定 CPU 時間片、內(nèi)存資源绎狭、磁盤資源等细溅,因此會帶來一定的負面影響。?

此外儡嘶,dump 的文件可能比較大 , 一般我們可以考慮使用 zip 命令對文件進行壓縮處理喇聊,這樣在下載文件時能減少帶寬的開銷。?

下載 dump 文件完成之后蹦狂,由于 dump 文件較大可將 dump 文件備份至制定位置或者直接刪除誓篱,以釋放磁盤在這塊的空間占用。

dump 日志分析

MAT(Memory Analyzer Tool)凯楔,一個基于 Eclipse 的內(nèi)存分析工具窜骄,是一個快速、功能豐富的 JAVA heap 分析工具摆屯,它可以幫助我們查找內(nèi)存泄漏和減少內(nèi)存消耗邻遏。?

使用內(nèi)存分析工具從眾多的對象中進行分析,快速的計算出在內(nèi)存中對象的占用大小,看看是誰阻止了垃圾收集器的回收工作准验,并可以通過報表直觀的查看到可能造成這種結果的對象赎线。?

具體可以參考:Java內(nèi)存分析工具MAT(Memory Analyzer Tool)安裝使用實例 : https://blog.csdn.net/jin_kwok/article/details/80326088?和?基于Java內(nèi)存dump文件分析解決內(nèi)存泄漏問題 : http://www.reibang.com/p/2cf7169ba1c4

jstack命令

printf '%x\n' tid --> 10 進制至 16 進制線程 ID(navtive 線程) %d 10 進制?

jstack pid | grep tid -C 30 --color ps -mp 8278 -o THREAD,tid,time | head -n 40

某 Java 進程 CPU 占用率高,我們想要定位到其中 CPU 占用率最高的線程糊饱。?

(1) 先利用top命令找到CPU占用高的進程pid?

也可以通過ps -ef | grep 應用名 來快速定位自己應用的pid?

顯示pid:29080?

(2) 利用 top 命令可以查出占 CPU 最高的線程 pid (先找到該pid 29080下所有的線程數(shù)據(jù))?


可以看到占用cpu資源最高的為29173

(3) 占用率最高的線程 ID 為29173垂寥,將其轉換為 16 進制形式 (因為 java native 線程以 16 進制形式輸出)

printf '%x\n' 29173?

(4) 利用 jstack 打印出 java 線程調(diào)用棧信息?

jstack 29080 | grep '0x71f5' -A 50 --color?

可以看到這個線程是在做kafka相關的操作。因為這是測試另锋,所以并不是因為CPU真的占用過高的情況滞项。?

更多內(nèi)容也可以參考:?

如何使用jstack分析線程狀態(tài) : http://www.reibang.com/p/6690f7e92f27?

通過jstack與jmap分析一次線上故障: https://www.cnblogs.com/kingszelda/p/9034191.html

jinfo命令

jinfo可以用來查看正在運行的java運用程序的擴展參數(shù)。?

查看pid對應的JVM參數(shù)夭坪,可以到?PerfMa : http://xxfox.perfma.com/jvm/check?校驗參數(shù)的正確性?

jinfo -flags pid?

拿到Command line后面的配置參數(shù)到perfma中驗證查詢:?

這里面好多功能可以去使用蓖扑。

jstat命令

jstat:Java Virtual Machine statistics monitoring tool JDK自帶的一個輕量級小工具。

jstat顯示GC執(zhí)行的情況

jstat -gc 12538 5000?

即會每5秒一次顯示進程號為12538的java進成的GC情況

說明:?

S0C台舱、S1C律杠、S0U、S1U:Survivor 0/1區(qū)容量(Capacity)和使用量(Used)?

EC竞惋、EU:Eden區(qū)容量和使用量?

OC柜去、OU:年老代容量和使用量?

PC、PU:永久代容量和使用量?

YGC拆宛、YGT:年輕代GC次數(shù)和GC耗時?

FGC嗓奢、FGCT:Full GC次數(shù)和Full GC耗時?

GCT:GC總耗時

顯示內(nèi)容說明如下(部分結果是通過其他其他參數(shù)顯示的,暫不說明):?

S0C:年輕代中第一個survivor(幸存區(qū))的容量 (字節(jié))?

S1C:年輕代中第二個survivor(幸存區(qū))的容量 (字節(jié))?

S0U:年輕代中第一個survivor(幸存區(qū))目前已使用空間 (字節(jié))?

S1U:年輕代中第二個survivor(幸存區(qū))目前已使用空間 (字節(jié))?

EC:年輕代中Eden(伊甸園)的容量 (字節(jié))?

EU:年輕代中Eden(伊甸園)目前已使用空間 (字節(jié))?

OC:Old代的容量 (字節(jié))?

OU:Old代目前已使用空間 (字節(jié))?

PC:Perm(持久代)的容量 (字節(jié))?

PU:Perm(持久代)目前已使用空間 (字節(jié))?

YGC:從應用程序啟動到采樣時年輕代中gc次數(shù)?

YGCT:從應用程序啟動到采樣時年輕代中gc所用時間(s)?

FGC:從應用程序啟動到采樣時old代(全gc)gc次數(shù)?

FGCT:從應用程序啟動到采樣時old代(全gc)gc所用時間(s)?

GCT:從應用程序啟動到采樣時gc用的總時間(s)?

總結

一般分析CPU或者內(nèi)存異常情況可以通過以下幾步:

查看日志

查看CPU情況

查看TCP情況

查看java線程浑厚,jstack

查看java堆股耽,jmap

通過MAT分析堆文件,尋找無法被回收的對象

參考:?

Java線上問題排查思路與工具使用 : https://blog.csdn.net/GitChat/article/details/79019454

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钳幅,一起剝皮案震驚了整個濱河市物蝙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌敢艰,老刑警劉巖诬乞,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異钠导,居然都是意外死亡震嫉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門牡属,熙熙樓的掌柜王于貴愁眉苦臉地迎上來票堵,“玉大人,你說我怎么就攤上這事逮栅°彩疲” “怎么了窗宇?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瞳浦。 經(jīng)常有香客問我,道長废士,這世上最難降的妖魔是什么叫潦? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮官硝,結果婚禮上矗蕊,老公的妹妹穿的比我還像新娘。我一直安慰自己氢架,他們只是感情好傻咖,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著岖研,像睡著了一般卿操。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上孙援,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天害淤,我揣著相機與錄音,去河邊找鬼拓售。 笑死窥摄,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的础淤。 我是一名探鬼主播崭放,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鸽凶!你這毒婦竟也來了币砂?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤玻侥,失蹤者是張志新(化名)和其女友劉穎道伟,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體使碾,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡蜜徽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了票摇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拘鞋。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖矢门,靈堂內(nèi)的尸體忽然破棺而出盆色,到底是詐尸還是另有隱情灰蛙,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布隔躲,位于F島的核電站摩梧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏宣旱。R本人自食惡果不足惜仅父,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浑吟。 院中可真熱鬧笙纤,春花似錦、人聲如沸组力。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽燎字。三九已至腥椒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間候衍,已是汗流浹背寞酿。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留脱柱,地道東北人伐弹。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像榨为,于是被迫代替她去往敵國和親惨好。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容