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

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

商務辦公
在Linux系統中,有一個守護進程(daemon)會定期把buffers中的數據寫入的磁盤,也可以使用 sync 命令手動把buffers中的數據寫入磁盤。使用buffers可以把分散的 I/O 操作集中起來,減少了磁盤尋道的時間和磁盤碎片。

[[262533]]

top基本使用

top 命令運行圖:

 

***行:基本信息

 

第二行:任務信息

 

第三行:CPU使用情況

 

第四行:物理內存使用情況

 

buff/cache:

buffers 和 cache 都是內存中存放的數據,不同的是,buffers 存放的是準備寫入磁盤的數據,而 cache 存放的是從磁盤中讀取的數據

在Linux系統中,有一個守護進程(daemon)會定期把buffers中的數據寫入的磁盤,也可以使用 sync 命令手動把buffers中的數據寫入磁盤。使用buffers可以把分散的 I/O 操作集中起來,減少了磁盤尋道的時間和磁盤碎片。

cache是Linux把讀取頻率高的數據,放到內存中,減少I/O。Linux中cache沒有固定大小,根據使用情況自動增加或刪除。

第五行:交換區使用情況

 

Swap(內存交換區):

是硬盤上的一塊空間。在內存不足的情況下,操作系統把內存中不用的數據存到硬盤的交換區,騰出內存來讓別的程序運行。因此,開啟swap會一定程度的引起 I/O 性能下降(阿里服務器默認不開)

第六行:進程詳細信息

 

死循環

構造的代碼如下:

  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參數

先手動制造CPU飆高的場景,多執行幾次,小編這里執行3次

  1. curl localhost:8080/top/loop 

執行top

 

jstack命令工具可以得到線程堆棧信息,根據這些線程堆棧信息,我們可以去檢查Java程序出現的問題

看到pid為23757的進程CPU占用較高,執行如下命令

  1. jstack 23757 > loop.txt 

看看pid為23757的進程中線程的具體情況

  1. top -p 23757 -H 

當然你也可以使用交互命令

  1. top -p 23757 

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

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

這里可能有人有疑惑,為什么線程也有PID啊?其實線程進程都會有自己的ID,這個ID就叫做PID,PID是不特指進程ID,線程ID也可以叫做PID

將10進制的23772轉為16進制,因為jstack中PID用的是16進制

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

打開loop.txt文件,搜5cdc

 

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

  1. while (true) {} 

好了定位到代碼中的位置了,當然生產環境中肯定不會寫一個死循環的,有可能在特殊場景下出現死循環,或執行一個方法特別慢,用這種方法很快就能找到代碼位置。

死鎖

接著訪問

  1. curl localhost:8080/top/loop 

執行

  1. jstack 23757 > loop.txt 

打開loop.txt文件到***

 

 

看到發現一個死鎖,死鎖代碼的位置描述的很清楚,生產環境發生的死鎖當然沒有這么簡單,所有學會用這些命令排查還是很有必要的

本文轉載自微信公眾號「 Java識堂」,轉載本文請聯系Java識堂公眾號。

責任編輯:武曉燕 來源: Java識堂
相關推薦

2017-08-19 23:21:14

線上CPU定位

2015-10-23 14:36:38

程序員起跑線

2022-03-31 09:00:47

高并發Log4j2java

2019-07-24 11:52:11

CPU服務器面試官

2010-07-29 08:41:11

路由器故障

2010-08-10 11:19:28

路由器故障

2021-07-04 22:29:12

MySQL死鎖云日志

2017-02-22 15:19:17

服務器虛擬化優化虛擬環境

2013-06-06 13:34:56

HashMap線程不安全

2015-04-22 09:33:41

2018-04-04 16:24:49

區塊鏈數字貨幣比特幣

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死循環數據

2009-04-23 13:58:52

路由器定位故障

2023-11-15 18:53:06

線程客戶端

2019-12-19 10:31:16

運維架構技術

2019-05-13 08:24:58

數據庫MySQLInnoDB

2010-10-26 16:40:13

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一级片在线视频 | 亚洲人成在线观看 | 国产精品久久国产精品99 | av中文字幕在线播放 | 国产一区二区视频在线 | 日日日色| 精品久久久久久久久亚洲 | 久久一起草 | 91久久 | 精品久久久久久亚洲综合网 | 91视频日本| 超碰在线播 | 夜夜草 | 国产一区二区三区视频免费观看 | 国产亚洲成av人片在线观看桃 | 国产精品久久久久久久久久久久久 | 亚洲欧美日韩精品久久亚洲区 | 一级黄色裸片 | 久久9久| 日本字幕在线观看 | 国产农村妇女精品一区 | 精品久草 | 欧洲亚洲视频 | 中文字幕成人在线 | 午夜寂寞网站 | 国产精品一区在线观看你懂的 | 亚洲高清视频在线观看 | 国产亚洲成av人片在线观看桃 | 婷婷久久网| 日本不卡一区 | 成人性视频免费网站 | 香蕉大人久久国产成人av | 亚洲精品久久久久久宅男 | 有码一区| 日韩中字幕 | 6080亚洲精品一区二区 | 男人的天堂avav | 久久青| 91精品国产日韩91久久久久久 | 精品亚洲一区二区 | 久国产视频 |