日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

timed_waiting线程是否占用cpu_程序CPU占用率飙升,如何定位线程的堆栈信息?超详细,值得收藏看不懂还有配套视频 第319篇...

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 timed_waiting线程是否占用cpu_程序CPU占用率飙升,如何定位线程的堆栈信息?超详细,值得收藏看不懂还有配套视频 第319篇... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關歷史文章(閱讀本文前,您可能需要先看下之前的系列?)

國內最全的Spring?Boot系列之三

2020上半年發文匯總「值得收藏」

GraphQL的探索之路?–?SpringBoot集成GraphQL小栗子篇二?-?第315篇

GraphQL的探索之路?–?SpringBoot集成GraphQL之Query篇三?-?第316篇

GraphQL的探索之路?–?SpringBoot集成GraphQL之Mutation篇四?-?第317篇

RocketMQ安裝Linux/Mac/Window - 第318篇

需求緣起

在群里有這么一段對話:

愿得一人心:服務器cpu load偏高,無從下手,哪位大佬能提供點兒幫助

不老神話:top 查看偏高的進程

老鼠愛上貓:百度谷歌啊? 查問題也是程序員必備技能之一

莫欺少年窮:要相信你肯定不是第一個遇到這個問題的

愿得一人心:查了,不頂用。

?????? 問問題真的把問題說清楚,不然解答的人也是一臉懵逼,很多人都是愿意解答問題的,但是問問題的人問的模棱兩可,導致沒有人敢解答。

正文開始? ?? ?

悟纖:師傅,師傅,緊急求助。

師傅:徒兒,何事如此之著急?

悟纖:我發現我寫的代碼導致CPU持續為99%,但是項目路這么大,我也不知道是哪塊代碼導致的。

師傅:徒兒,那你得看看是哪個線程里的邏輯導致了CPU飆高。

悟纖:那我們怎么找到這個線程在運行的堆棧信息吶?

師傅:jstack呀,你難道沒有聽過嘛?

悟纖:知道到知道這個指令,但是查看了些資料,都是說的不清楚,看完我也是一塌糊涂吶。

師傅:看來得為師給你好好講講了。

悟纖:還是喜歡師傅的講解方式,簡單、詳細、一語道破天機

一、排查步驟

師傅:要找回線程的堆棧信息,主要是利用java給我們提供的調優工具jstack,我們看下具體的一個步驟:

(1)使用命令top -p ,顯示你的java進程的cpu情況,pid是你的java進程號,比如14203。(使用jps可以獲取到java的進程id 或者top直接查看)

(2)按H,獲取每個線程的CPU情況。(shirt+H)

(3)找到內存和cpu占用最高的線程tid,比如14204。

(4)轉為十六進制得到 377C ,此為線程id的十六進制表示。

(5)執行 jstack |grep -A 10 ,得到線程堆棧信息中1371這個線程所在行的后面10行。(注意:如果十六進制由字母的要小寫)

# Jstack 14203 |? grep -A 10 377c

(6)查看對應的堆棧信息找出可能存在問題的代碼。

師傅:看起來是不是很復雜,描述的羅里吧嗦的。

悟纖:看著就暈頭轉向的。

師傅:一句話概述。

一句話:通過top找到線程id,通過jstack找到線程的堆棧信息。

二、小試牛刀:Linux環境

2.1 準備工作

?????? 我們編寫一個小代碼EndlessLoopTest用于模擬導致cpu過高(源碼在最后提供),編譯成class文件,將我們的class文件放到Linux上。

?????? 注意:存放的需要根據包名建立目錄結構,否則無法運行此class文件。

比如包名是com.kfit.jvm那么就需要創建一個目錄結構com/kfit/jvm,然后把EndlessLoopTest.class放到這里面。

執行class:

java com.kfit.jvm.EndlessLoopTest

2.2 排查實戰

2.2.1 使用top找到cpu飆高的java進程ID

?????? 首先我們需要找到java進程ID,使用top指令:

#top

?????? 我們一看就看到了pid為14203的java的CPU使用率是99.7%并且持續飆高,那么這個肯定是代碼寫的有問題了。

2.2.2 使用top -p 顯示進程情況

?????? 我們使用如下命名查看java進程的情況:

#top -p 14203

?????? 通過-p的方法就是只顯示了指定進程的信息。

2.2.3 按H查看線程的CPU情況

?????? 在上面的界面中使用shirt+H進行查看各個線程的CPU情況:

?????? 注意這里的PID實際對應的是線程的十進制的tid,通過上面我們可以看到CPU使用很高的線程ID是14204。

2.2.4 線程十進制轉換為十六進制

?????? 我們將獲取到的線程十進制的轉換為十六進制:

14204(十進制) = 377C(十六進制)

?????? 怎么轉你不知道嘛?

方式一:找個轉換網站

https://tool.oschina.net/hexconvert/

https://tool.lu/hexconvert/(這個強大,可以一下子轉換出來好幾個進制的)

方式二:Linux/Mac的printf

?????? 使用Linux/Mac的printf即可:

printf %x 14204? && echo

方式三:Linux/Mac的echo

?????? Echo也是很強大的:

echo 'ibase=10;obase=16;14204'|bc

方式四:python的hex

?????? 利用python的轉換hex將十進制轉換為十六進制:

悟纖:師傅,你這是要飄了,要跑題了

師傅:哈哈,師傅這是已經超神了。

2.2.5 執行jstack得到線程的堆棧信息

執行 jstack | grep -A 10 ,得到線程堆棧信息:

#jstack 14203 |? grep -A 10 377c

注意:小c、小c、小c,重要的事情說3遍。

2.2.6查看對應的堆棧信息問題排查

?????? 我上面的堆棧信息可以看出出現問題的類是EndlessLoopTest.java,代碼行號是13:

源碼:

package com.kfit.jvm;import java.net.Socket;/** * 死循環測試 */public class EndlessLoopTest { public void test(){ int random = (int) (java.lang.Math.random() * 1000); while (random < 100) { random = random * 10; } System.out.println(random); } public static void main(String[] args) { EndlessLoopTest test = new EndlessLoopTest(); for(int i=0;i<5000;i++){ test.test(); } }}

?????? 我們分析這個while循環,看著挺正常的,但是如果當random為0的時候,不就是陷入死循環了嗎。

悟纖小結

悟纖:師傅,你真是我的偶像,講解的如此之詳細,我要是再不懂,看來只能退出編程界了。

師傅:徒兒,言重了。雖然為師已經介紹的很詳細了,但是難免在實際使用的時候會踩到一些坑。

悟纖:那為了避免大家采坑,我和大家總結下。

核心就是兩大步驟:

(1)通過top找到線程id。

通過Linux系統的top命名找到cpu飆高的進程id;通過top -p 找到該進程id的cpu信息;然后配合shirt+H命名,就可以找到CPU線程高的線程ID:通過工具類將十進制的線程id轉換為十六進制的。

(2)通過jstack找到線程的堆棧信息。

?????? 通過jstack | grep -A 10 就可以找到線程的堆棧信息。

通過top找到線程id,通過jstack找到線程的堆棧信息。

我就是我,是顏色不一樣的煙火。
我就是我,是與眾不同的小蘋果。

à悟空學院:https://t.cn/Rg3fKJD

學院中有Spring?Boot相關的課程!點擊「閱讀原文」進行查看!

SpringBoot視頻:http://t.cn/A6ZagYTi

Spring?Cloud視頻:http://t.cn/A6ZagxSR

SpringBoot?Shiro視頻:http://t.cn/A6Zag7IV

SpringBoot交流平臺:https://t.cn/R3QDhU0

SpringData和JPA視頻:http://t.cn/A6Zad1OH

SpringSecurity5.0視頻:http://t.cn/A6ZadMBe

Sharding-JDBC分庫分表實戰:

http://t.cn/A6ZarrqS

分布式事務解決方案「手寫代碼」:

http://t.cn/A6ZaBnIr

深入理解JVM內存模型/調優實戰:

http://t.cn/A6wWMVqG

總結

以上是生活随笔為你收集整理的timed_waiting线程是否占用cpu_程序CPU占用率飙升,如何定位线程的堆栈信息?超详细,值得收藏看不懂还有配套视频 第319篇...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲成人mv | 高清乱码免费网 | 国产一二三在线视频 | 娇妻高潮浓精白浆xxⅹ | 美女免费网站 | 日本熟妇一区二区 | 国产三级自拍视频 | 日本一区二区三区四区在线观看 | 欧美人成在线 | 亚洲国产日韩av | 日韩大片在线 | 国产理伦 | 美女色av | 欧美成人日韩 | 丰满的人妻hd高清日本 | 欧美一区二三区 | 日本人和亚洲人zjzjhd | 欧美日韩精品在线观看 | 美日韩精品一区二区 | 嫩草视频网站 | 天天碰天天干 | 亚洲综合在线成人 | 国产福利91精品一区二区三区 | 国产精品美女www爽爽爽视频 | 午夜爱爱毛片xxxx视频免费看 | 欧美中文字幕在线播放 | 大片视频免费观看视频 | 欧美日韩国产精品一区 | 免费萌白酱国产一区二区三区 | 久久精品高清 | 伊人久久大香网 | 黄色aa视频| 东京久久久| 看黄免费网站 | 欧美自拍第一页 | 怨女1988国语版在线观看高清 | 成人福利视频网 | 欧美丝袜视频 | 韩日视频一区 | 欧美在线视频第一页 | 99久久99久久精品免费看蜜桃 | 国产免费无码一区二区视频 | 在线看片| 久久久综合色 | 婷婷久久五月天 | 日本韩国视频 | 69xxx国产 | 精品午夜一区二区三区 | 亚洲网av | 欧美成人极品 | 国产成人在线观看免费网站 | 国产成人在线视频网站 | 天堂网色 | 亚洲永久免费视频 | 亚洲国产成人综合 | 免费毛片看片 | 国产精品污网站 | 最新黄色在线 | 日韩精品偷拍 | 色播在线视频 | 香蕉网在线观看 | 国产午夜无码视频在线观看 | 久久免费片| 精品人妻无码一区二区三 | 日本不卡视频在线播放 | 黄色大视频 | 久久精品人妻av一区二区三区 | 在线视频免费播放 | 日本草逼视频 | 亚洲私拍| 国产精品久久毛片av大全日韩 | 成人做爰黄 | 女生扒开尿口给男生捅 | 91久久精品视频 | 免费黄色av网址 | 亚洲永久视频 | 欧美国产日韩在线 | 日韩欧美国产一区二区三区 | 久久成人高清 | 国产91高清 | 91在线中文字幕 | 茄子av在线 | 男女污污视频在线观看 | 精品国产乱码久久久久久闺蜜 | 97视频一区二区三区 | 黄色片免费的 | 国产超碰自拍 | 中文字幕一区二区免费 | 国产三级免费观看 | 亚洲无码精品在线观看 | 丁香七月激情 | av大片在线播放 | 亚洲h| 夜色视频在线观看 | 人人射人人干 | 国产一区自拍视频 | 五月婷久久 | 欧美福利视频 | 国产在线一区二区三区 |