docker中如何做jvm的gc、內(nèi)存等問題排查

背景:docker內(nèi)運行的Java服務(wù)不像宿主機直接運行那么方便查詢問題侥祭,今天記錄下,首先鏡像內(nèi)有些命令是不支持的,比如tomcat鏡像沒有l(wèi)s矮冬、top等命令(jdk鏡像默認(rèn)有這些命令)谈宛,不方便查找問題,tomcat的openjdk版本是有的胎署,如tomcat:8.5.49-jdk8-openjdk

參考
碰到系統(tǒng)CPU飆高和頻繁GC吆录,你會怎么排查?
Linux使用jstat命令查看jvm的GC情況

小知識

1 根據(jù)容器名查看對應(yīng)宿主機的進程id

docker inspect -f '{{.State.Pid}}' competent_lichterman

2 查看gc情況琼牧,9是進程id 恢筝,每5s自動刷新一次。

jstat -gc 9 5000

full gc的次數(shù)太多說明程序有問題巨坊,fgc 期間會導(dǎo)致服務(wù)不可用撬槽,后面有fgc的時間


圖片.png

3 查看jvm線程的堆棧信息。查看進程id為1的線程信息趾撵,包含iot代碼字樣的附近30行內(nèi)容侄柔,一般程序出問題,這里會定位到有問題的代碼部分

jstack 1 | grep "iot" -A 30

導(dǎo)出線程信息到文本
jstack -l <pid> >jvm.txt

4 查看整個JVM內(nèi)存狀態(tài)
jmap -heap [pid]
查看JVM堆中對象詳細(xì)占用情況
jmap -histo [pid]
導(dǎo)出整個JVM 中內(nèi)存信息
jmap -dump:format=b,file=文件名 [pid]
jmap -dump:live,format=b,file=d:/20170417.dump PID

[root@01384fe8ffb3 /]# jmap -heap 1
Attaching to process ID 1, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.131-b11

using thread-local object allocation.
Parallel GC with 2 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 2092957696 (1996.0MB)
   NewSize                  = 44040192 (42.0MB)
   MaxNewSize               = 697303040 (665.0MB)
   OldSize                  = 88080384 (84.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 490733568 (468.0MB)
   used     = 24698304 (23.55413818359375MB)
   free     = 466035264 (444.44586181640625MB)
   5.032935509314904% used
From Space:
   capacity = 6815744 (6.5MB)
   used     = 6531296 (6.228729248046875MB)
   free     = 284448 (0.271270751953125MB)
   95.82660381610577% used
To Space:
   capacity = 14155776 (13.5MB)
   used     = 0 (0.0MB)
   free     = 14155776 (13.5MB)
   0.0% used
PS Old Generation
   capacity = 150470656 (143.5MB)
   used     = 50911384 (48.552879333496094MB)
   free     = 99559272 (94.9471206665039MB)
   33.83475911741888% used

35304 interned Strings occupying 4184288 bytes.
[root@01384fe8ffb3 /]# 

問題排查思路

1通過docker stats 查看服務(wù)cpu占调、內(nèi)存占用情況暂题,定位有問題的服務(wù)

圖片.png

2 進入容器top命令查看cpu占用最多的進程id,一般jdk鏡像java進程pid都是1


圖片.png

3 查看進程中各線程占用情況
top -Hp 1

圖片.png

4 jstack -F 線程id :即可查看某線程正在運行情況(不加F會報錯>可骸8颐摇!)

[root@826d95fa3a92 /]# jstack -F 167
Attaching to process ID 167, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.131-b11
Deadlock Detection:

No deadlocks found.

Thread 436: (state = BLOCKED)
Error occurred during stack walking:
sun.jvm.hotspot.debugger.DebuggerException: sun.jvm.hotspot.debugger.DebuggerException: get_thread_regs failed for a lwp
        at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$LinuxDebuggerLocalWorkerThread.execute(LinuxDebuggerLocal.java:163)
        at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.getThreadIntegerRegisterSet(LinuxDebuggerLocal.java:482)
        at sun.jvm.hotspot.debugger.linux.LinuxThread.getContext(LinuxThread.java:65)
        at sun.jvm.hotspot.runtime.linux_amd64.LinuxAMD64JavaThreadPDAccess.getCurrentFrameGuess(LinuxAMD64JavaThreadPDAccess.java:93)
        at sun.jvm.hotspot.runtime.JavaThread.getCurrentFrameGuess(JavaThread.java:256)
        at sun.jvm.hotspot.runtime.JavaThread.getLastJavaVFrameDbg(JavaThread.java:218)
        at sun.jvm.hotspot.tools.StackTrace.run(StackTrace.java:86)
        at sun.jvm.hotspot.tools.StackTrace.run(StackTrace.java:45)
        at sun.jvm.hotspot.tools.JStack.run(JStack.java:66)
        at sun.jvm.hotspot.tools.Tool.startInternal(Tool.java:260)
        at sun.jvm.hotspot.tools.Tool.start(Tool.java:223)
        at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118)
        at sun.jvm.hotspot.tools.JStack.main(JStack.java:92)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at sun.tools.jstack.JStack.runJStackTool(JStack.java:140)
        at sun.tools.jstack.JStack.main(JStack.java:106)
Caused by: sun.jvm.hotspot.debugger.DebuggerException: get_thread_regs failed for a lwp
        at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.getThreadIntegerRegisterSet0(Native Method)
        at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLo

5導(dǎo)出堆內(nèi)存數(shù)據(jù)
jmap -dump:format=b,file=myjvm.dump 1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末苦银,一起剝皮案震驚了整個濱河市啸胧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌幔虏,老刑警劉巖纺念,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異想括,居然都是意外死亡陷谱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門瑟蜈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烟逊,“玉大人,你說我怎么就攤上這事铺根∠芮” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵位迂,是天一觀的道長访雪。 經(jīng)常有香客問我详瑞,道長,這世上最難降的妖魔是什么臣缀? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任坝橡,我火速辦了婚禮,結(jié)果婚禮上精置,老公的妹妹穿的比我還像新娘计寇。我一直安慰自己,他們只是感情好脂倦,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布饲常。 她就那樣靜靜地躺著,像睡著了一般狼讨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上柒竞,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天政供,我揣著相機與錄音,去河邊找鬼朽基。 笑死布隔,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的稼虎。 我是一名探鬼主播衅檀,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼霎俩!你這毒婦竟也來了哀军?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤打却,失蹤者是張志新(化名)和其女友劉穎杉适,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柳击,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡猿推,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了捌肴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹬叭。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖状知,靈堂內(nèi)的尸體忽然破棺而出秽五,到底是詐尸還是另有隱情,我是刑警寧澤饥悴,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布筝蚕,位于F島的核電站卦碾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏起宽。R本人自食惡果不足惜洲胖,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坯沪。 院中可真熱鬧绿映,春花似錦、人聲如沸腐晾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽藻糖。三九已至淹冰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間巨柒,已是汗流浹背樱拴。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留洋满,地道東北人晶乔。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像牺勾,于是被迫代替她去往敵國和親正罢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345