成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

線上CPU飚高(死循環(huán),死鎖...)?幫你迅速定位代碼位置

商務(wù)辦公
在Linux系統(tǒng)中,有一個(gè)守護(hù)進(jìn)程(daemon)會(huì)定期把buffers中的數(shù)據(jù)寫(xiě)入的磁盤(pán),也可以使用 sync 命令手動(dòng)把buffers中的數(shù)據(jù)寫(xiě)入磁盤(pán)。使用buffers可以把分散的 I/O 操作集中起來(lái),減少了磁盤(pán)尋道的時(shí)間和磁盤(pán)碎片。

[[262533]]

top基本使用

top 命令運(yùn)行圖:

 

***行:基本信息

 

第二行:任務(wù)信息

 

第三行:CPU使用情況

 

第四行:物理內(nèi)存使用情況

 

buff/cache:

buffers 和 cache 都是內(nèi)存中存放的數(shù)據(jù),不同的是,buffers 存放的是準(zhǔn)備寫(xiě)入磁盤(pán)的數(shù)據(jù),而 cache 存放的是從磁盤(pán)中讀取的數(shù)據(jù)

在Linux系統(tǒng)中,有一個(gè)守護(hù)進(jìn)程(daemon)會(huì)定期把buffers中的數(shù)據(jù)寫(xiě)入的磁盤(pán),也可以使用 sync 命令手動(dòng)把buffers中的數(shù)據(jù)寫(xiě)入磁盤(pán)。使用buffers可以把分散的 I/O 操作集中起來(lái),減少了磁盤(pán)尋道的時(shí)間和磁盤(pán)碎片。

cache是Linux把讀取頻率高的數(shù)據(jù),放到內(nèi)存中,減少I(mǎi)/O。Linux中cache沒(méi)有固定大小,根據(jù)使用情況自動(dòng)增加或刪除。

第五行:交換區(qū)使用情況

 

Swap(內(nèi)存交換區(qū)):

是硬盤(pán)上的一塊空間。在內(nèi)存不足的情況下,操作系統(tǒng)把內(nèi)存中不用的數(shù)據(jù)存到硬盤(pán)的交換區(qū),騰出內(nèi)存來(lái)讓別的程序運(yùn)行。因此,開(kāi)啟swap會(huì)一定程度的引起 I/O 性能下降(阿里服務(wù)器默認(rèn)不開(kāi))

第六行:進(jìn)程詳細(xì)信息

 

死循環(huán)

構(gòu)造的代碼如下:

  1. @RestController 
  2. @RequestMapping("top"
  3. public class ShowTopController { 
  4.  
  5.     private Object lock1 = new Object(); 
  6.     private Object lock2 = new Object(); 
  7.  
  8.     @RequestMapping("test"
  9.     public String test() { 
  10.         return "success"
  11.     } 
  12.  
  13.     @RequestMapping("loop"
  14.     public String loop() { 
  15.         System.out.println("start"); 
  16.         while (true) {} 
  17.     } 
  18.  
  19.     @RequestMapping("deadlock"
  20.     public String deadlock() { 
  21.         new Thread(() -> { 
  22.             synchronized (lock1) { 
  23.                 try{ 
  24.                     TimeUnit.SECONDS.sleep(1); 
  25.                 } catch (Exception e) {} 
  26.                 synchronized (lock2) { 
  27.                     System.out.println("thread1 over"); 
  28.                 } 
  29.             } 
  30.         }).start(); 
  31.         new Thread(() -> { 
  32.             synchronized (lock2) { 
  33.                 try{ 
  34.                     TimeUnit.SECONDS.sleep(1); 
  35.                 } catch (Exception e) {} 
  36.                 synchronized (lock1) { 
  37.                     System.out.println("thread2 over"); 
  38.                 } 
  39.             } 
  40.         }).start(); 
  41.         return "success"
  42.     } 

這里只介紹一下用到的top參數(shù)

先手動(dòng)制造CPU飆高的場(chǎng)景,多執(zhí)行幾次,小編這里執(zhí)行3次

  1. curl localhost:8080/top/loop 

執(zhí)行top

 

jstack命令工具可以得到線程堆棧信息,根據(jù)這些線程堆棧信息,我們可以去檢查Java程序出現(xiàn)的問(wèn)題

看到pid為23757的進(jìn)程CPU占用較高,執(zhí)行如下命令

  1. jstack 23757 > loop.txt 

看看pid為23757的進(jìn)程中線程的具體情況

  1. top -p 23757 -H 

當(dāng)然你也可以使用交互命令

  1. top -p 23757 

然后再輸入H,效果和上面一樣

可以看到PID為23772,23773和23774的線程占用CPU較高

這里可能有人有疑惑,為什么線程也有PID啊?其實(shí)線程進(jìn)程都會(huì)有自己的ID,這個(gè)ID就叫做PID,PID是不特指進(jìn)程ID,線程ID也可以叫做PID

將10進(jìn)制的23772轉(zhuǎn)為16進(jìn)制,因?yàn)閖stack中PID用的是16進(jìn)制

  1. printf "%x" 23772 
  2. 輸出5cdc 

打開(kāi)loop.txt文件,搜5cdc

 

可以看到線程一直在執(zhí)行ShowTopController中的第23行,即

  1. while (true) {} 

好了定位到代碼中的位置了,當(dāng)然生產(chǎn)環(huán)境中肯定不會(huì)寫(xiě)一個(gè)死循環(huán)的,有可能在特殊場(chǎng)景下出現(xiàn)死循環(huán),或執(zhí)行一個(gè)方法特別慢,用這種方法很快就能找到代碼位置。

死鎖

接著訪問(wèn)

  1. curl localhost:8080/top/loop 

執(zhí)行

  1. jstack 23757 > loop.txt 

打開(kāi)loop.txt文件到***

 

 

看到發(fā)現(xiàn)一個(gè)死鎖,死鎖代碼的位置描述的很清楚,生產(chǎn)環(huán)境發(fā)生的死鎖當(dāng)然沒(méi)有這么簡(jiǎn)單,所有學(xué)會(huì)用這些命令排查還是很有必要的

本文轉(zhuǎn)載自微信公眾號(hào)「 Java識(shí)堂」,轉(zhuǎn)載本文請(qǐng)聯(lián)系Java識(shí)堂公眾號(hào)。

責(zé)任編輯:武曉燕 來(lái)源: Java識(shí)堂
相關(guān)推薦

2017-08-19 23:21:14

線上CPU定位

2015-10-23 14:36:38

程序員起跑線

2022-03-31 09:00:47

高并發(fā)Log4j2java

2019-07-24 11:52:11

CPU服務(wù)器面試官

2010-07-29 08:41:11

路由器故障

2010-08-10 11:19:28

路由器故障

2021-07-04 22:29:12

MySQL死鎖云日志

2013-06-06 13:34:56

HashMap線程不安全

2017-02-22 15:19:17

服務(wù)器虛擬化優(yōu)化虛擬環(huán)境

2015-04-22 09:33:41

2018-04-04 16:24:49

區(qū)塊鏈數(shù)字貨幣比特幣

2011-09-07 10:13:04

IPv6IPv4

2018-10-10 20:20:14

2024-12-06 16:00:00

C++頭文件

2020-12-17 07:39:30

HashMap死循環(huán)數(shù)據(jù)

2023-11-15 18:53:06

線程客戶端

2009-04-23 13:58:52

路由器定位故障

2019-12-19 10:31:16

運(yùn)維架構(gòu)技術(shù)

2019-05-13 08:24:58

數(shù)據(jù)庫(kù)MySQLInnoDB

2010-10-26 16:40:13

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产伦精品一区二区三区在线 | 亚洲成人免费网址 | 精品影院 | 日韩视频在线一区 | 天天射天天操天天干 | 欧美性大战xxxxx久久久 | 久久久tv| 亚洲免费av一区 | 日本精品久久 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 91精品久久久久久久久 | 国产精品美女久久久av超清 | 日日摸日日添日日躁av | 91在线中文字幕 | 男女羞羞视频免费看 | 久久婷婷av | 亚洲精品www久久久久久广东 | 97伦理影院 | 欧美精品一区二区三区在线 | 精品久久99 | 激情在线视频网站 | 干一干操一操 | 欧美中文字幕一区二区 | 成人深夜福利 | 国产日韩一区二区三免费 | 日日骚网| 国产日韩欧美 | www性色| 成人黄色电影在线观看 | 99久久国产综合精品麻豆 | 无吗视频 | 国产精品成人一区二区三区 | 亚洲精品乱码久久久久久9色 | 午夜久久| 午夜精品在线观看 | 天天插天天射天天干 | 视频一区二区三区在线观看 | 97精品视频在线 | 日韩中文一区二区 | 黄色一级大片在线免费看产 | 91精品国产综合久久婷婷香蕉 |