一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CPU 100%問題怎么排查?有哪些方法?

小林coding ? 來源:古時(shí)的風(fēng)箏 ? 2024-03-18 17:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

首先,先用放之四海而皆準(zhǔn)的命令 top,確認(rèn)一下是不是 Java 進(jìn)程是罪魁禍?zhǔn)?。Java 進(jìn)程要不然就是個(gè)后臺(tái)任務(wù),要不然就是個(gè) jar 包,比如一個(gè)Spring Boot 服務(wù)。

剛接觸開發(fā)那會(huì)兒,別的命令都不會(huì),一看到CPU飆升,上來就是一個(gè) top,當(dāng)top 命令執(zhí)行完了,也就完了。就像一個(gè)舉重選手用盡了所有力氣,然后就只能呆坐在哪里了。

下面介紹兩種后續(xù)操作,讓我們?cè)趫?zhí)行完 top以后,確定是 Java 進(jìn)程搞的鬼的情況下,順利的找出出現(xiàn)問題的方法。

第一種,用系統(tǒng)工具和 JDK 自帶的 jstack 工具。第二種,用 Arthas 探測工具。

使用 jstack 工具

第一步,使用 top 找到占用 CPU 最高的 Java 進(jìn)程

前面說了這一步,就是使用 Top 命令

e35b0f8c-e4f5-11ee-a297-92fbcf53809c.png

使用 top命令發(fā)現(xiàn)占用 CPU 99.7% 的線程是 Java 進(jìn)程,進(jìn)程 PID 為 13731。

第二步,找到占用 CPU 最高的線程

上一步用 top命令找到了那個(gè) Java 進(jìn)程。那一個(gè)進(jìn)程中有那么多線程,不可能所有線程都一直占著 CPU 不放,這一步要做的就是揪出這個(gè)罪魁禍?zhǔn)?,?dāng)然有可能不止一個(gè)。

接下來,還是用 top命令,只不過加一個(gè)參數(shù)-Hp ,就是下面這樣

top-Hppid

H參數(shù)表示要顯示線程級(jí)別的信息,p則表示指定的pid,也就是進(jìn)程id。代入前面得到的那個(gè)Java進(jìn)程,完整的命令是這樣的

top-Hp13731

執(zhí)行之后,這個(gè)Java進(jìn)程中占用線程占用 CPU 的情況就列出來了。

e36c8668-e4f5-11ee-a297-92fbcf53809c.png

可以看到占用 CPU 最高的那個(gè)線程 PID 為 13756。

第三步,保存線程堆棧信息

這就要用到 JDK 默認(rèn)提供的一個(gè)工具了,叫做 jstack。當(dāng)你安裝了 JDK 之后,在 bin目錄下會(huì)有一大堆內(nèi)置的工具,java也是其中之一,還有另外我們可能比較熟悉的 javac

e370ffcc-e4f5-11ee-a297-92fbcf53809c.png

jstack 用于生成 Java 進(jìn)程的線程快照(thread dump)。線程快照是一個(gè)關(guān)于 Java 進(jìn)程中所有線程當(dāng)前狀態(tài)的快照,包括每個(gè)線程的堆棧信息。通過分析線程快照,可以了解 Java 進(jìn)程中各個(gè)線程的運(yùn)行狀態(tài)、鎖信息等。

我們用jstack的目的就是將那個(gè)占用 CPU 最高的線程的堆棧信息搞下來,然后進(jìn)一步分析。使用命令 jstack pid > out.log將某個(gè)進(jìn)程的堆棧信息輸出到 out.log文件中。

當(dāng)前 Java 程序的所有線程信息都可以通過 jstack命令查看,我們用jstack命令將第一步找到的 Java 進(jìn)程的線程棧保存下來。

jstack13731>thread_stack.log

第四步,在線程棧中查找最貴禍?zhǔn)椎木€程

第二步已經(jīng)找到了這個(gè)罪魁禍?zhǔn)椎木€程 PID 是 13756。

然后我們將 13756轉(zhuǎn)換為 16 進(jìn)制的,可以用在線進(jìn)制轉(zhuǎn)換的網(wǎng)站直接轉(zhuǎn)換,比如 https://tool.oschina.net/hexconvert 這個(gè),轉(zhuǎn)換結(jié)果為 0x35bc。

最后,我們?cè)诰€程棧中,也就是上一步保存的那個(gè) thread_stack.log 文件,在里面查找這個(gè)16進(jìn)制的線程 id (0x35bc)。

e378c7c0-e4f5-11ee-a297-92fbcf53809c.png

然后,我么能看到了我們需要的線程名稱、線程狀態(tài),哪個(gè)方法的哪一行代碼消耗了最多的 CPU 都很清楚了。

第二種,Arthas

Arthas 是阿里開源的一款線上監(jiān)控診斷產(chǎn)品,通過全局視角實(shí)時(shí)查看應(yīng)用 load、內(nèi)存、gc、線程的狀態(tài)信息,并能在不修改應(yīng)用代碼的情況下,對(duì)業(yè)務(wù)問題進(jìn)行診斷,包括查看方法調(diào)用的出入?yún)?、異常,監(jiān)測方法執(zhí)行耗時(shí),類加載信息等,大大提升線上問題排查效率。

用 Arthas 查找占用 CPU 最高的方法只是一個(gè)開胃小菜,除此之外,它最大的用途是在不改代碼、不重啟服務(wù)的情況下對(duì)程序進(jìn)行動(dòng)態(tài)監(jiān)控。如果你碰到了線上詭異問題,一定要用 Arthas 嘗試找一找問題,開闊一下眼界。

好了,更多的功能到官網(wǎng) https://arthas.aliyun.com/ 了解吧,接下來就將一下如何用 Arthas 達(dá)到前面用 jstack 同樣的目的。

安裝 Arthas

當(dāng)然了,要使用 Arthas,你就必須先把它安裝到你的目標(biāo)服務(wù)器上,也就是那個(gè)出問題的Java服務(wù)所在的服務(wù)器。

下載 jar 包

curl-Ohttps://arthas.aliyun.com/arthas-boot.jar

啟動(dòng) Arthas 服務(wù)

java-jararthas-boot.jar

啟動(dòng)之后,會(huì)列出當(dāng)前這臺(tái)服務(wù)器上的所有 Java 進(jìn)程,然后你選擇你要排查的那個(gè)服務(wù)即可。

e37e9448-e4f5-11ee-a297-92fbcf53809c.png

然后出現(xiàn) arthas@之后表示已經(jīng)啟動(dòng),并成功 attach 到目標(biāo)進(jìn)程上 。

然后可以輸入命令 dashboard看一下實(shí)時(shí)面板,默認(rèn) 5 秒刷新一次,在這個(gè)面板上能夠看到線程、內(nèi)存堆棧、GC和Runtime的基本信息。如果你用過 VisualVM 的話,就和那個(gè)基本一樣。

e387ff2e-e4f5-11ee-a297-92fbcf53809c.png

好了,開始用 Arthas 找到導(dǎo)致 CPU 負(fù)載過高的問題吧。

找到占用CPU最高的進(jìn)程

第一步,其實(shí)還是用 top命令找到占用 CPU 最高的進(jìn)程,也就是 Arthas 啟動(dòng)時(shí)選擇 attach 的那個(gè) Java 進(jìn)程。

然后 java -jar arthas-boot.jar啟動(dòng)Arthas,并attach 。

找到占用 CPU 最高的線程

執(zhí)行 thread命令,這個(gè)命令會(huì)顯示所有線程的信息,并且把CPU使用率高的線程排在前面。

這樣,一眼就看出來了,第一個(gè)線程的 CPU 使用率高達(dá) 99% 了,就是它。

e38e6ef4-e4f5-11ee-a297-92fbcf53809c.png

查看堆棧信息

使用 thread ID 獲取堆棧信息,其實(shí)就是 jstack pid相同的作用。通過前一步看到這個(gè)線程的 ID 是18,然后執(zhí)行 thread 18

e3af5c9a-e4f5-11ee-a297-92fbcf53809c.png

然后直接就看出來了出現(xiàn)問題的位置,TestController.java文件的 high方法的第23行。然后進(jìn)代碼看

com.moonkite.wallpapermanage.controller.TestController.high(TestController.java:23)

這個(gè)方法是我故意寫的死循環(huán),真實(shí)情況當(dāng)然沒有這么明顯,還需要針對(duì)具體代碼認(rèn)真分析。

總結(jié)

高 CPU 占用率這個(gè)問題是一種很常見也很典型的線上問題,排查方式只要按上述順序記下來就基本上沒什么問題。

其實(shí)還是推薦使用 Arthas,除了它確實(shí)功能非常多之外,還有就是在線上場景下,使用 jstack有時(shí)會(huì)碰到問題,如果這個(gè)線程已經(jīng)忙的一點(diǎn)轉(zhuǎn)圜的余地都沒有了,jstack命令可能會(huì)執(zhí)行失敗。



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11062

    瀏覽量

    216451
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2987

    瀏覽量

    108110

原文標(biāo)題:面試官:CPU 100% 問題怎么排查?

文章出處:【微信號(hào):小林coding,微信公眾號(hào):小林coding】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    使用匯編知識(shí)排查疑難問題的方法

    那么,本篇文章,我將再介紹一個(gè)使用匯編知識(shí)排查疑難問題的方法,希望對(duì)大家有所幫助。
    發(fā)表于 07-27 10:31 ?857次閱讀

    Linux系統(tǒng)CPU占用率100%的排查思路

    今天浩道跟大家分享linux硬核干貨,工作中當(dāng)你服務(wù)器CPU達(dá)到100%時(shí),干著急是沒有用的,該查問題還得自己去查。本文將給大家羅列排查異常故障思路,并且文末附上相關(guān)shell腳本,去實(shí)際一番,你會(huì)發(fā)現(xiàn)原來解決問題的
    的頭像 發(fā)表于 01-23 10:26 ?6653次閱讀
    Linux系統(tǒng)<b class='flag-5'>CPU</b>占用率<b class='flag-5'>100</b>%的<b class='flag-5'>排查</b>思路

    AD9963一直沒有信號(hào)輸出是什么原因造成的呢?什么排查方法嗎?

    DAC一直沒有信號(hào)輸出。 請(qǐng)問可能是什么原因造成這種現(xiàn)象的呢?什么排查方法嗎? 望各位大神指教。。。。。。
    發(fā)表于 12-22 06:52

    電能質(zhì)量的測量方法,如何排查電能質(zhì)量問題?

    電能質(zhì)量的測量方法如何排查電能質(zhì)量問題?
    發(fā)表于 04-09 06:47

    排查EMI問題的實(shí)用性技巧哪些?

    如何減少一個(gè)產(chǎn)品在測試室進(jìn)行最終完整的EMC一致性評(píng)估時(shí)失敗的風(fēng)險(xiǎn)?排查EMI問題的實(shí)用性技巧哪些?
    發(fā)表于 05-11 06:42

    GPIO無法觸發(fā)中斷常規(guī)排查方法哪些?

    1、電源域是否打開 2、IOMUX是否設(shè)置對(duì) 3、是否配置了中斷方式,外部電平是否滿足條件 4、是否為輸入狀態(tài) 備注:這次分享的是,我們做展銳平臺(tái)GPIO排查方法,不同平臺(tái)、不同版本、不同項(xiàng)目都會(huì)
    發(fā)表于 11-24 16:11

    建立一個(gè)方法和套路來對(duì) Load 高問題排查

    講解 Linux Load 高如何排查的話題屬于老生常談了,但多數(shù)文章只是聚焦了幾個(gè)點(diǎn),缺少整體排查思路的介紹。所謂 “授人以魚不如授人以漁"。本文試圖建立一個(gè)方法和套路,來幫助讀者對(duì) Load 高問題
    的頭像 發(fā)表于 12-28 14:18 ?5739次閱讀
    建立一個(gè)<b class='flag-5'>方法</b>和套路來對(duì) Load 高問題<b class='flag-5'>排查</b>

    cpu使用率多少算正常_cpu使用率100怎么辦

    本文首先分析了cpu使用率多少算正常,其次闡述了cpu使用率100的解決方法,最后介紹了優(yōu)化cpu使用率的
    發(fā)表于 04-29 09:28 ?1.6w次閱讀

    “三維六步”干擾排查哪幾種方法?資料下載

    電子發(fā)燒友網(wǎng)為你提供“三維六步”干擾排查哪幾種方法?資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-15 08:50 ?17次下載
    “三維六步”干擾<b class='flag-5'>排查</b><b class='flag-5'>有</b>哪幾種<b class='flag-5'>方法</b>?資料下載

    JVM CPU使用率飆高問題的排查分析過程

    問題現(xiàn)象 排查過程 問題現(xiàn)象 首先,我們一起看看通過 VisualVM 監(jiān)控到的機(jī)器 CPU 使用率圖: 如上圖所示,在 下午3:45 分之前,CPU 的使用率明顯飆高,最高飆到近 100
    的頭像 發(fā)表于 10-10 16:31 ?2701次閱讀

    網(wǎng)絡(luò)故障排查思路和處理方法

    網(wǎng)絡(luò)故障是最容易出現(xiàn)的,且難以解決的問題。本文提供的網(wǎng)絡(luò)故障排查思路和處理方法,可解決日常工作中大部分網(wǎng)絡(luò)問題。
    發(fā)表于 10-31 09:14 ?1.1w次閱讀

    CPU散熱使用的導(dǎo)熱凝膠的不同使用方法和注意事項(xiàng)哪些呢?

    CPU散熱使用的導(dǎo)熱凝膠的不同使用方法和注意事項(xiàng)哪些呢?,15年行業(yè)經(jīng)驗(yàn)和您聊聊
    的頭像 發(fā)表于 03-04 10:24 ?4038次閱讀
    <b class='flag-5'>CPU</b>散熱使用的導(dǎo)熱凝膠的不同使用<b class='flag-5'>方法</b>和注意事項(xiàng)<b class='flag-5'>有</b>哪些呢?

    雅馬哈YS/YSM系列貼片機(jī)故障排查方法

    雅馬哈YS/YSM系列貼片機(jī)故障排查方法
    的頭像 發(fā)表于 09-13 10:05 ?4818次閱讀
    雅馬哈YS/YSM系列貼片機(jī)故障<b class='flag-5'>排查</b><b class='flag-5'>方法</b>

    常見的電源適配器故障及排查方法哪些?

    常見的電源適配器故障及排查方法哪些? 電源適配器故障是使用電子設(shè)備時(shí)經(jīng)常遇到的問題之一。合理排查和解決電源適配器故障是確保電子設(shè)備正常運(yùn)行的重要步驟。本文將詳細(xì)介紹常見的電源適配器故
    的頭像 發(fā)表于 11-24 14:08 ?1.2w次閱讀

    DCS日常維護(hù)與故障分析排查方法

    DCS(分布式控制系統(tǒng))的日常維護(hù)與故障分析排查是確保系統(tǒng)穩(wěn)定運(yùn)行的關(guān)鍵環(huán)節(jié)。以下提供DCS日常維護(hù)與故障分析排查的詳細(xì)方法: 一、日常維護(hù)方法 1. 硬件維護(hù): ● 定期對(duì)DCS控制
    的頭像 發(fā)表于 03-05 16:53 ?616次閱讀
    DCS日常維護(hù)與故障分析<b class='flag-5'>排查</b><b class='flag-5'>方法</b>