精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linux下定位異常消耗的線程實(shí)戰(zhàn)分析

系統(tǒng) Linux
在我們嵌入式linux開發(fā)過程中,開發(fā)過程中我們經(jīng)常會(huì)使用多進(jìn)程、多線程開發(fā)。那么多線程使用過程中,我們大概率會(huì)遇到某線程長(zhǎng)時(shí)間占用cpu,導(dǎo)致設(shè)備執(zhí)行異常。

 [[438570]]

前言:

之前分享過一篇Linux開發(fā)coredump文件分析實(shí)戰(zhàn)分享 ,今天再來分享一篇實(shí)戰(zhàn)文章。

在我們嵌入式linux開發(fā)過程中,開發(fā)過程中我們經(jīng)常會(huì)使用多進(jìn)程、多線程開發(fā)。那么多線程使用過程中,我們大概率會(huì)遇到某線程長(zhǎng)時(shí)間占用cpu,導(dǎo)致設(shè)備執(zhí)行異常。

通常只有四五個(gè)線程,我們可以通過一個(gè)個(gè)線程調(diào)試捕捉到異常線程,如果你開發(fā)的設(shè)備上面運(yùn)行了大概三四十個(gè)線程,我們一下子不好看到對(duì)應(yīng)哪個(gè)線程出問題,也不好使用列舉法進(jìn)行搜索,這個(gè)時(shí)候我們需要配合一些工具進(jìn)行監(jiān)控以及檢查我們執(zhí)行的進(jìn)程下面的線程。下面我就給大家介紹一下我自己工作中實(shí)際遇到的例子。

情節(jié)介紹:

在工作中,我遇到這樣一個(gè)問題,我的設(shè)備跑機(jī)的時(shí)候發(fā)現(xiàn),機(jī)器運(yùn)行某些狀態(tài)時(shí)候有些怪異,對(duì)于某些機(jī)制的處理響應(yīng)不夠及時(shí),最后top檢查,發(fā)現(xiàn)是我運(yùn)行的某個(gè)進(jìn)程中的某幾個(gè)線程運(yùn)行cpu占有率很高,導(dǎo)致其他的一些線程無法及時(shí)運(yùn)行。

找到問題了,接下來我們就開始找對(duì)應(yīng)的線程然后進(jìn)行修改,前文提到,進(jìn)程里面有一兩個(gè)線程還好說,我們可以通過一些比較基礎(chǔ)的方法,一個(gè)個(gè)線程進(jìn)行l(wèi)og或者其他手段的信息輸出,但是如果我們遇到單個(gè)進(jìn)程里面有很多線程的時(shí)候,我們?nèi)绾螜z查呢?

初步列一個(gè)使用的工具大綱:ps 組合命令、top組合命令、pstack、strace、ltrace、gdb attach 實(shí)時(shí)調(diào)試 、 kill 、coredump文件查看線程堆棧

以上就是我使用到的一些命令和操作,接下來一一給大家進(jìn)行分析和介紹:

首先給大家介紹每個(gè)工具和命令詳細(xì)介紹,再用自己的一個(gè)小例子把這些工具進(jìn)行組合使用說明。

工具和組合命令詳細(xì)介紹

首先給詳細(xì)的介紹一下這些工具說明書:

ps 的選項(xiàng)參數(shù)介紹:

ps命令大家在linux使用應(yīng)該是很熟悉的,ps是Process Status的縮寫,用來列出系統(tǒng)中當(dāng)前運(yùn)行的進(jìn)程。使用該命令可以確定有哪些進(jìn)程正在運(yùn)行和運(yùn)行的狀態(tài)、進(jìn)程是否結(jié)束、進(jìn)程有沒有僵死、哪些進(jìn)程占用了過多的資源等等。ps命令所列出的進(jìn)行是當(dāng)前進(jìn)程的快照,也就是并不是動(dòng)態(tài)的,而是執(zhí)行該命令時(shí)那一時(shí)刻進(jìn)行的狀態(tài)。

  1. ps 的參數(shù)非常多, 在此僅列出幾個(gè)常用的參數(shù)并大略介紹含義 
  2. -A 列出所有的進(jìn)程 
  3. -w 顯示加寬可以顯示較多的資訊 
  4. -au 顯示較詳細(xì)的資訊 
  5. -aux 顯示所有包含其他使用者的行程 

我一般都是使用 ps -aux進(jìn)行查看后臺(tái)運(yùn)行的進(jìn)程pid

下面再進(jìn)行補(bǔ)充一下今天要使用到的ps組合命令

查看進(jìn)程對(duì)應(yīng)的線程

  1. ps -T -p 472 (472 此處為真實(shí)進(jìn)程的pid大家自行替換) 

第一行是對(duì)應(yīng)的進(jìn)程ID,第二行是對(duì)應(yīng)的線程ID

查看進(jìn)程對(duì)應(yīng)線程的執(zhí)行時(shí)間

  1. ps -eLo pid,lwp,pcpu |grep 1780(1780 此處為真實(shí)進(jìn)程的pid大家自行替換) 

第一行是進(jìn)程pid,第二行是進(jìn)程里面線程對(duì)應(yīng)的pid,第三行是該線程執(zhí)行ms時(shí)間,通過線程執(zhí)行時(shí)間長(zhǎng)度,我們配合該線程的堆棧信息,線程頻繁執(zhí)行IO操作或者線程頻繁執(zhí)行的庫函數(shù)來判斷該線程是否錯(cuò)誤占用cpu資源。

top組合命令介紹:

top命令也是大家熟悉的一個(gè)命令,可以顯示當(dāng)前系統(tǒng)正在執(zhí)行的進(jìn)程的相關(guān)信息,包括進(jìn)程ID、內(nèi)存占用率、CPU占用率等。同時(shí)也可以對(duì)指定進(jìn)程發(fā)送一個(gè)信號(hào)。

  1. -b 批處理 
  2. -c 顯示完整的信息 
  3. -I 忽略失效過程 
  4. -s 保密模式 
  5. -S 累積模式 
  6. -i<時(shí)間> 設(shè)置間隔時(shí)間 
  7. -u<用戶名> 指定用戶名 
  8. -p<進(jìn)程號(hào)> 指定進(jìn)程 
  9. -n<次數(shù)> 循環(huán)顯示的次數(shù) 

首先我們一般會(huì)直接使用top命令,查看進(jìn)程信息,這里做一下多描述,因?yàn)楹罄m(xù)使用strace工具還是使用ltrace工具,是從top命令的cpu信息區(qū)進(jìn)行確定我們使用具體工具。

  1. test@test:~# top 
  2.  
  3. top - 02:32:07 up 17 min,  2 users,  load average: 3.17, 3.26, 2.17 
  4. Tasks: 165 total,   3 running, 162 sleeping,   0 stopped,   0 zombie 
  5. %Cpu(s): 31.3 us,  7.0 sy,  0.0 ni, 60.9 id,  0.0 wa,  0.0 hi,  0.9 si,  0.0 st 
  6. MiB Mem :   3845.3 total,   3424.3 free,    240.9 used,    180.1 buff/cache 
  7. MiB Swap:      0.0 total,      0.0 free,      0.0 used.   3566.7 avail Mem 
  8.  
  9.   PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND 
  10.   461 root     -96 -20 2432536  58472  18888 S 176.5   1.5  18:15.07 ex 
  11.   375 root      -2   0       0      0      0 S   5.9   0.0   0:04.23 RTW_RECV_THREAD 
  12.   430 root      20   0  682204  22536   6880 S   5.9   0.6   0:55.69 python 
  13. 16913 root      20   0       0      0      0 S   5.9   0.0   0:02.46 kworker/u12:0 
  14. 22219 root      20   0    3300   2100   1628 R   5.9   0.1   0:00.02 top 
  15.     1 root      20   0    1892    620    556 S   0.0   0.0   0:00.41 init 
  16.     2 root      20   0       0      0      0 S   0.0   0.0   0:00.01 kthreadd 
  17.     3 root      20   0       0      0      0 S   0.0   0.0   0:00.14 ksoftirqd/0 
  18.     5 root       0 -20       0      0      0 S   0.0   0.0   0:00.00 kworker/0:0H 
  19.     7 root      20   0       0      0      0 R   0.0   0.0   0:02.24 rcu_sched 
  20.     8 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_bh 
  21.     9 root      rt   0       0      0      0 S   0.0   0.0   0:00.16 migration/0 
  22.    10 root      rt   0       0      0      0 S   0.0   0.0   0:00.00 watchdog/0 

top顯示的統(tǒng)計(jì)信息:

top顯示信息前五行是當(dāng)前系統(tǒng)情況整體的統(tǒng)計(jì)信息區(qū)。這部分統(tǒng)計(jì)信息的解釋參考文章《top命令》:

第一行,任務(wù)隊(duì)列信息,同 uptime 命令的執(zhí)行結(jié)果

  1. test@test:~# uptime 
  2.  
  3. 13:46:08 up 1:04, 1 userload average: 0.00, 0.00, 0.00 

具體參數(shù)說明情況如下:

  1. 02:32:07 — 當(dāng)前系統(tǒng)時(shí)間 
  2. up 17 min,  — 系統(tǒng)已經(jīng)運(yùn)行了17分鐘 
  3. 2 users — 當(dāng)前有2個(gè)用戶終端登錄系統(tǒng) 
  4. load average: 3.17, 3.26, 2.17— load average后面的三個(gè)數(shù)分別是1分鐘、5分鐘、15分鐘的負(fù)載情況。 

load average數(shù)據(jù)是每隔5秒鐘檢查一次活躍的進(jìn)程數(shù),然后按特定算法計(jì)算出的數(shù)值。如果這個(gè)數(shù)除以邏輯CPU的數(shù)量,結(jié)果高于5的時(shí)候就表明系統(tǒng)在超負(fù)荷運(yùn)轉(zhuǎn)了。

第二行,Tasks — 任務(wù)(進(jìn)程),具體信息說明如下:

  1. 系統(tǒng)現(xiàn)在共有165個(gè)進(jìn)程,其中處于運(yùn)行中的有3個(gè),162個(gè)在休眠(sleep),stoped狀態(tài)的有0個(gè),zombie狀態(tài)(僵尸)的有0個(gè)。 

第三行,cpu狀態(tài)信息,具體屬性說明如下:

  1. 31.3 us — 用戶空間占用CPU的百分比。 
  2. 7.0  sy — 內(nèi)核空間占用CPU的百分比。 
  3. 0.0  ni — 改變過優(yōu)先級(jí)的進(jìn)程占用CPU的百分比 
  4. 60.9  id — 空閑CPU百分比 
  5. 0.0 wa — IO等待占用CPU的百分比 
  6. 0.0 hi — 硬中斷(Hardware IRQ)占用CPU的百分比 
  7. 0.9 si — 軟中斷(Software Interrupts)占用CPU的百分比 
  8. 0.0 st 虛擬機(jī)管理程序?yàn)榱硪粋€(gè)處理器(從虛擬機(jī)中竊取)服務(wù)時(shí),虛擬cpu進(jìn)行非自愿等待所花費(fèi)的時(shí)間 

第四行,內(nèi)存狀態(tài),具體信息如下:

  1. 3845.3 total — 物理內(nèi)存總量(3.8GB) 
  2. 3424.3 free — 空閑內(nèi)存總量(3.2GB) 
  3. 240.9 used — 使用中的內(nèi)存總量(240.9MB) 
  4. 180.1 buff/cache — 緩存的內(nèi)存量 (180M) 

第五行,swap交換分區(qū)信息,具體信息說明如下:

  1. 0.0 total — 交換區(qū)總量(0.0 GB) 
  2. 0.0 free — 空閑交換區(qū)總量(0MB) 
  3. 0.0 used — 使用的交換區(qū)總量(0MB) 
  4. 3566.7 avail Mem — 可使用緩沖的交換區(qū)總量(3.5GB) 

第六行,空行。

第七行以下:各進(jìn)程(任務(wù))的狀態(tài)監(jiān)控,項(xiàng)目列信息說明如下:

  1. PID — 進(jìn)程id 
  2. USER — 進(jìn)程所有者 
  3. PR — 進(jìn)程優(yōu)先級(jí) 
  4. NI — nice值。負(fù)值表示高優(yōu)先級(jí),正值表示低優(yōu)先級(jí) 
  5. VIRT — 進(jìn)程使用的虛擬內(nèi)存總量,單位kb。VIRT=SWAP+RES 
  6. RES — 進(jìn)程使用的、未被換出的物理內(nèi)存大小,單位kb。RES=CODE+DATA 
  7. SHR — 共享內(nèi)存大小,單位kb 
  8. S — 進(jìn)程狀態(tài)。D=不可中斷的睡眠狀態(tài) R=運(yùn)行 S=睡眠 T=跟蹤/停止 Z=僵尸進(jìn)程 
  9. %CPU — 上次更新到現(xiàn)在的CPU時(shí)間占用百分比 
  10. %MEM — 進(jìn)程使用的物理內(nèi)存百分比 
  11. TIME+ — 進(jìn)程使用的CPU時(shí)間總計(jì),單位1/100秒 
  12. COMMAND — 進(jìn)程名稱(命令名/命令行) 

這是top的常規(guī)使用得到的信息,我們一般進(jìn)行組合使用命令,我一般使用,

  1. top -Hp 461(461 此處為真實(shí)進(jìn)程的pid大家自行替換) 

通過-Hp命令,我可以查看指定進(jìn)程的線程

其中在統(tǒng)計(jì)信息的第三行中,可以看到cpu占用率主要是用戶態(tài)。

那么我們應(yīng)該最好使用ltrace進(jìn)行用戶態(tài)庫函數(shù)的調(diào)用查詢。當(dāng)然strace也可以,但是由于內(nèi)核使用占據(jù)cpu使用率不高,你追蹤到的IO操作應(yīng)該遠(yuǎn)少于用戶態(tài)庫函數(shù)調(diào)用。

pstack 的選項(xiàng)參數(shù)介紹:

pstack 是 Linux 系統(tǒng)下的一個(gè)命令行工具,此命令可以顯示指定進(jìn)程每個(gè)線程的堆棧快照,便于排查程序異常和性能評(píng)估,此命令允許使用的唯一選項(xiàng)是要檢查的進(jìn)程的 PID。要是要使用這個(gè)包大家需要在所使用的linux lib和斌目錄里面增加該工具。

示例

  1. sudo pstack 16634(該pid為我自己測(cè)試電腦對(duì)應(yīng)的進(jìn)程 大家使用時(shí)候可以自行替換成自己對(duì)應(yīng)的pid) 

可以在一段時(shí)間內(nèi),多執(zhí)行幾次pstack,若發(fā)現(xiàn)代碼棧總是停在同一個(gè)位置, 那個(gè)位置就需要重點(diǎn)關(guān)注,很可能就是出問題的地方;

ltrace 的選項(xiàng)參數(shù)介紹:

ltrace能夠跟蹤進(jìn)程的庫函數(shù)調(diào)用,它會(huì)顯現(xiàn)出調(diào)用了哪個(gè)庫函數(shù),而strace則是跟蹤進(jìn)程的每個(gè)系統(tǒng)調(diào)用。ltrace跟蹤進(jìn)程調(diào)用庫函數(shù)參數(shù)選項(xiàng)有什么?

ltrace 的選項(xiàng)參數(shù)介紹:

  1. -c 統(tǒng)計(jì)庫函數(shù)每次調(diào)用的時(shí)間,最后程序退出時(shí)打印摘要。 
  2. -C 解碼低級(jí)別名稱(內(nèi)核級(jí))為用戶級(jí)名稱。 
  3. -d 打印調(diào)試信息。 
  4. -e expr 輸出過濾器,通過表達(dá)式,可以過濾掉你不想要的輸出。 
  5. -e printf 表示只查看printf函數(shù)調(diào)。 
  6. -e!printf 表示查看除printf函數(shù)以外的所有函數(shù)調(diào)用。 
  7. -f 跟蹤子進(jìn)程。 
  8. -o flename 將ltrace的輸出寫入文件filename。 
  9. -p pid 指定要跟蹤的進(jìn)程pid。 
  10. -r 輸出每一個(gè)調(diào)用的相對(duì)時(shí)間。 
  11. -S 顯示系統(tǒng)調(diào)用。 
  12. -t 在輸出中的每一行前加上時(shí)間信息。 
  13. -tt 在輸出中的每一行前加上時(shí)間信息,精確到微秒。 
  14. -ttt 在輸出中的每一行前加上時(shí)間信息,精確到微秒,而且時(shí)間表示為UNIX時(shí)間戳。 
  15. -T 顯示每次調(diào)用所花費(fèi)的時(shí)間。 

strace 的選項(xiàng)參數(shù)介紹:

strace常用來跟蹤進(jìn)程執(zhí)行時(shí)的系統(tǒng)調(diào)用和所接收的信號(hào)。在Linux世界,進(jìn)程不能直接訪問硬件設(shè)備,當(dāng)進(jìn)程需要訪問硬件設(shè)備(比如讀取磁盤文件,接收網(wǎng)絡(luò)數(shù)據(jù)等等)時(shí),必須由用戶態(tài)模式切換至內(nèi)核態(tài)模式,通過系統(tǒng)調(diào)用訪問硬件設(shè)備。strace可以跟蹤到一個(gè)進(jìn)程產(chǎn)生的系統(tǒng)調(diào)用,包括參數(shù),返回值,執(zhí)行消耗的時(shí)間。

  1. -f 跟蹤目標(biāo)進(jìn)程,以及目標(biāo)進(jìn)程創(chuàng)建的所有子進(jìn)程 
  2. -t 在輸出中的每一行前加上時(shí)間信息(-tt 表示微秒級(jí)) 
  3. -T 顯示每個(gè)系統(tǒng)調(diào)用所耗的時(shí)間 

通過觀察系統(tǒng)調(diào)用我們可以確認(rèn)當(dāng)前程序的行為,分析其消耗的時(shí)間、返回值是否正常。可以過濾指定的線程號(hào),確認(rèn)當(dāng)前線程的行為是否符合預(yù)期,如果執(zhí)行命令后完全沒有輸出,那么可以懷疑是否由于網(wǎng)絡(luò)、IO等原因?qū)е伦枞虺绦虍a(chǎn)生死鎖。

pstree 的選項(xiàng)參數(shù)介紹:

命令將所有進(jìn)程以樹狀圖顯示,樹狀圖將會(huì)以 pid (如果有指定) 或是以 init 這個(gè)基本進(jìn)程為根 (root),如果有指定使用者 id,則樹狀圖會(huì)只顯示該使用者所擁有的進(jìn)程。要是要使用這個(gè)包大家需要在所使用的linux lib和斌目錄里面增加該工具。

  1. -A: 各進(jìn)程樹之間的連接以ASCII碼字符來連接 
  2. -U:各進(jìn)程樹之間的連接以u(píng)tf8字符來連接,某些終端可能會(huì)有錯(cuò)誤 
  3. -p:同時(shí)列出每個(gè)進(jìn)程的PID 
  4. -u: 同時(shí)列出每個(gè)進(jìn)程的所屬賬號(hào)名稱: 

pstree -up 輸出進(jìn)程和子進(jìn)程樹形數(shù)據(jù)

kill <sig> <pid>和coredump文件查看線程堆棧:

因?yàn)橛行r(shí)候我們使用的linux環(huán)境下面不一定有很全的工具,例如上面所提到的pstack查看對(duì)應(yīng)的線程,會(huì)有其他的一些命令和工具替代,這里我就給大家介紹兩種我使用的方法,用來查看我實(shí)際的堆棧和對(duì)應(yīng)的pid線程信息。

  1. kill -11 461 

對(duì)應(yīng)的進(jìn)程就會(huì) 出現(xiàn)Segmentation fault (core dumped)

而我們?cè)O(shè)置了coredump文件的產(chǎn)生,產(chǎn)生條件里面有段錯(cuò)誤信號(hào),所以我發(fā)送了11信號(hào)給該進(jìn)程。

如果大家對(duì)于自己需要的信號(hào)不知道對(duì)應(yīng)的數(shù)字,可以用 kill -l 命令查詢。

至于通過coredump查看對(duì)應(yīng)的堆棧信息,我之前的這篇文章寫的比較全面了,這里就不再過多贅述了,大家可以點(diǎn)擊這篇文章進(jìn)行查看Linux開發(fā)coredump文件分析實(shí)戰(zhàn)分享。

除了使用kill命令殺死指定進(jìn)程,我們也可以通過top組合命令來殺死進(jìn)程:首先使用top進(jìn)入top顯示的信息,其次假如我們選擇好了 461這個(gè)進(jìn)程準(zhǔn)備殺死:

先輸入 k 進(jìn)入top的kill選項(xiàng)

  1. PID to signal/kill [default pid = 1451]  
  2.   PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                                                
  3.   461 root     -96 -20 2081464  28672  17756 S  21.7   1.4   0:07.05 exc   

再按照提示輸入 指定pid 461

  1. PID to signal/kill [default pid = 1451] 461 

使用enter 之后,按照提示輸入信號(hào),我選擇了 11( 段錯(cuò)誤信號(hào))

  1. Send pid 461 signal [15/sigterm] 11 

這個(gè)操作等同于 kill -11 461

gdb attach <pid>實(shí)時(shí)調(diào)試:

這個(gè)是gdb中實(shí)時(shí)調(diào)試的工具,指定進(jìn)程實(shí)時(shí)調(diào)試,但是實(shí)際中遇到大型代碼,調(diào)試起來太卡了,所以基本不用它實(shí)時(shí)調(diào)試,我是用來它來進(jìn)行實(shí)時(shí)看一些堆棧信息以及查看線程id和實(shí)際代碼的匹配。操作也是比較簡(jiǎn)單,從上面我們可以獲知你運(yùn)行的進(jìn)程的pid,你用gdb attach指定pid就可以進(jìn)行調(diào)試了。進(jìn)入之后的操作命令就是gdb調(diào)試的命令。

大家可以看到gdb attach一進(jìn)來就在最前面顯示對(duì)應(yīng)的lwp線程pid,這個(gè)pid和我們用top命令和ps命令以及strace、ltrace打印的pid信息是一致的。通過相同的pid我們就可以知道該進(jìn)程或者線程下執(zhí)行的具體操作了。

輸入gdb命令 thread apply all bt ,我們就可以看到對(duì)應(yīng)線程的堆棧,通過堆棧的信息,我們就可以反向查找代碼了。下面是一個(gè)截取,展示的是lwp 790(線程pid==790)的一個(gè)堆棧信息,通過#3 我們可以知道該線程代碼在even_manager.cpp的40行

實(shí)戰(zhàn)中的組合使用

通過上面的命令介紹,我們也知道了在linux下我們可以用到哪些工具可以分析我們的異常進(jìn)程和線程,下面我就通過一個(gè)我自己實(shí)際遇到的情況,給大家實(shí)際介紹一下這些工具的組合使用情況。

首先,我先使用top命令查看我cpu使用情況

這一看,ex進(jìn)程竟然占用了176%的cpu(我的設(shè)備是多核設(shè)備),也就是差不多兩個(gè)核的cpu被占滿了。此時(shí)可以看到主要占用的cpu資源是用戶態(tài)的資源,所以推薦使用ltrace查看,但是我這邊目前設(shè)備里面沒有這個(gè)包,所以直接使用了strace查看。

接下來我就想知道到底該進(jìn)程下的哪個(gè)線程,以及線程對(duì)應(yīng)的是哪部分代碼,頻繁執(zhí)行了什么操作。

所以我先使用了 top -Hp 461 查看我對(duì)應(yīng)該進(jìn)程下所有的線程執(zhí)行所占cpu的百分比。

也可以使用 ps -T -p 461 查看進(jìn)程對(duì)應(yīng)的線程pid信息

ps -eLo pid,lwp,pcpu |grep 461 查看線程執(zhí)行消耗的時(shí)間

strace -p 461 -f進(jìn)行查看該進(jìn)程下執(zhí)行了內(nèi)核交互函數(shù)最多執(zhí)行的部分

最左邊的部分就是對(duì)應(yīng)的執(zhí)行IO函數(shù)下的線程PID,我們同時(shí)可以直接指定線程pid進(jìn)行查詢線程的操作,例如我們看到線程845在讀fd為13的一個(gè)設(shè)備,我們可以單獨(dú)strace -p 845.

本來應(yīng)該是strace、ltrace、pstack配合使用,但是我使用的設(shè)備上沒有l(wèi)trace和pstack,所以我使用gdb attach直接調(diào)試進(jìn)程,查看對(duì)應(yīng)的線程堆棧信息,用來確認(rèn)top組合命令的出的線程pid信息和實(shí)際代碼進(jìn)行映射。

gdb attach 461 實(shí)時(shí)調(diào)試查看線程堆棧信息用來匹配實(shí)際的代碼部分

進(jìn)入之后直接使用 thread apply all bt 查看對(duì)應(yīng)的線程堆棧信息,通過堆棧信息,我們就可以知道對(duì)應(yīng)的代碼部分

每一個(gè)堆棧信息的最上面有顯示 lwp 大家就可以對(duì)照查看代碼了。

這時(shí)候我們就知道了該進(jìn)程下有哪些線程,那我們還需要知道該線程對(duì)應(yīng)的是代碼哪一部分代碼,以及線程具體執(zhí)行了哪些操作。

strace和gdb attach命令等從開發(fā)初始來說是好的技術(shù),但是實(shí)際使用中,由于代碼復(fù)雜性,以及c受限與cpu,在我strace和gdb attach使用中,這些工具因?yàn)橐恢北O(jiān)控進(jìn)程,會(huì)很占用你cpu資源,甚至gdb attach開始調(diào)試,機(jī)器直接運(yùn)行非常緩慢,遠(yuǎn)程ssh登錄都卡住了。所以只能用一些消耗資源少的操作進(jìn)行查看信息,就像內(nèi)存分析中的mtrace和valgrind,一啟動(dòng)使用,機(jī)器直接卡停。所以很多時(shí)候工具雖好,但是實(shí)際只能輔助一些而已,更重要我們要規(guī)范寫代碼。

結(jié)語

這就是我分享我在工作中使用的一些linux線程監(jiān)控的操作,如果大家有更好的想法和需求,也歡迎大家加我好友交流分享哈。

作者:良知猶存,白天努力工作,晚上原創(chuàng)公號(hào)號(hào)主。公眾號(hào)內(nèi)容除了技術(shù)還有些人生感悟,一個(gè)認(rèn)真輸出內(nèi)容的職場(chǎng)老司機(jī),也是一個(gè)技術(shù)之外豐富生活的人,攝影、音樂 and 籃球。關(guān)注我,與我一起同行。

 

責(zé)任編輯:武曉燕 來源: 羽林君
相關(guān)推薦

2017-01-12 15:17:27

線程CPU定位

2009-09-21 09:57:15

linux進(jìn)程cron

2015-01-09 10:01:50

Spring MVC

2020-07-15 08:11:05

Linuxc++程序

2011-04-20 16:14:09

LinuxWindows

2024-11-29 13:02:10

2020-07-28 09:48:49

Linux服務(wù)器2.5G

2025-01-07 08:42:54

2021-08-30 07:22:14

JVM OutOfMemory異常

2023-02-26 10:18:24

數(shù)據(jù)庫SQL語句

2019-08-09 08:43:02

2025-05-14 09:12:13

2023-08-01 08:20:42

JVM優(yōu)化虛擬機(jī)

2018-11-01 10:59:52

Linux內(nèi)存進(jìn)程

2022-09-24 13:21:34

Java服務(wù)異常

2021-11-29 20:44:31

Linux內(nèi)存進(jìn)程

2019-12-16 10:43:38

Linux內(nèi)存消耗進(jìn)程

2017-08-19 23:21:14

線上CPU定位

2019-11-06 15:58:54

Linux內(nèi)存消耗進(jìn)程

2021-02-23 10:05:39

Linux網(wǎng)絡(luò)分析tcpdump
點(diǎn)贊
收藏

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

国产高清av片| 日韩精品国内| 国产香蕉在线视频| 希岛爱理av免费一区二区| 亚洲mv大片欧洲mv大片精品| 蜜桃臀一区二区三区| 91超薄丝袜肉丝一区二区| 香蕉精品视频在线观看| 亚洲成人三级在线| 成年人视频观看| 在线观看av的网站| 国产一区二区三区四区五区入口 | 亚洲激情成人| 中文字幕精品一区久久久久| 精品国产免费久久久久久婷婷| 在线视频超级| 亚洲精品写真福利| 秋霞在线观看一区二区三区| 亚洲av无码一区二区三区性色| 噜噜噜在线观看免费视频日韩| 操日韩av在线电影| 少妇久久久久久久久久| 91成人福利社区| 一本色道久久综合狠狠躁的推荐| 91免费网站视频| 国模吧精品人体gogo| 成人一区二区三区在线观看 | 黄色大全在线观看| 亚洲精品极品| 欧美乱大交做爰xxxⅹ性3| 成人黄色免费网址| 色吊丝一区二区| 精品国产3级a| 日本xxxx免费| 999色成人| 欧美视频精品在线观看| 欧美啪啪免费视频| xxx性欧美| 亚洲精品视频一区| 香蕉精品视频在线| av色图一区| 欧美极品美女视频| 你懂的视频在线一区二区| 日本韩国在线观看| 国产91在线观看丝袜| 亚洲iv一区二区三区| 91肉色超薄丝袜脚交一区二区| 日韩中文字幕一区二区三区| 午夜精品久久久久久99热| 欧美人与禽zozzo禽性配| 午夜精品视频一区二区三区在线看| 国产亚洲日本欧美韩国| 亚洲区自拍偷拍| 精品一区二区三| 亚洲精品视频网上网址在线观看 | 黑人操亚洲人| 亚洲人成在线观看网站高清| 久久久久久久久久久国产精品| 青青久久av| 国产婷婷色综合av蜜臀av | 欧美午夜寂寞| 日韩精品免费综合视频在线播放| 老熟妇精品一区二区三区| 精品素人av| 亚洲免费av网址| 国产人妻大战黑人20p| 欧美在线电影| 久久五月天色综合| 久久久精品视频免费| 日韩午夜黄色| 国产成人在线一区| 看黄色一级大片| 精品影院一区二区久久久| 91理论片午午论夜理片久久| www.久久久久久| 99热这里都是精品| 日本黄网免费一区二区精品| 国产在线高清| 亚洲免费观看高清完整版在线| 成人免费a级片| 中国色在线日|韩| 色婷婷综合在线| 成年网站在线播放| 精品三级久久久| 亚洲第一中文字幕在线观看| 久久精品国产亚洲av久| 91一区二区| 国产做受高潮69| 国产天堂第一区| 国产精品99久久久久久久vr| 国产富婆一区二区三区| 国内av一区二区三区| 一区二区日韩av| www.欧美日本| 一区二区三区亚洲变态调教大结局| 日韩精品免费电影| 亚洲色偷偷综合亚洲av伊人| 制服诱惑一区二区| 成人黄色在线播放| 四虎影视在线播放| 亚洲国产精品成人综合| 老子影院午夜伦不卡大全| 日韩免费小视频| 精品日韩99亚洲| jizzjizzjizz国产| 99热免费精品在线观看| 成人在线中文字幕| 日韩三级电影网| 亚洲综合区在线| 中文字幕亚洲欧洲| 亚洲传媒在线| 久久久久久中文字幕| 中文字幕自拍偷拍| 91麻豆精品一区二区三区| 在线观看18视频网站| 成人午夜精品| 亚洲国产中文字幕在线观看| 性生交大片免费全黄| 久久久久.com| 国产精品9999久久久久仙踪林 | 台湾佬综合网| 久久国产精品99国产精| 国产91av在线播放| 99精品视频在线观看| 精品国产一区二区三区在线| 黄色欧美视频| 亚洲视频在线免费看| 精品成人久久久| 国产成人午夜高潮毛片| 青青草原国产免费| 粉嫩91精品久久久久久久99蜜桃| 日韩精品在线播放| 日本高清www免费视频| 国产盗摄一区二区三区| 中文字幕av久久| 台湾天天综合人成在线| 中文字幕在线成人| 国产乱码在线观看| 亚洲国产精品99久久久久久久久 | 欧美大片免费高清观看| 亚洲激情小视频| 国产真人真事毛片| 国产99久久久国产精品潘金| 特级西西444| 国内不卡的一区二区三区中文字幕| 最近2019中文字幕在线高清| 日韩乱码一区二区三区| 欧美—级在线免费片| 丁香婷婷激情网| 你懂的一区二区三区| 国产99在线|中文| 黄上黄在线观看| 欧美影院精品一区| 中文字幕黄色网址| 美日韩一区二区| 国产又黄又爽免费视频| 精品三级久久久| 久久久亚洲网站| 天天爽夜夜爽夜夜爽| 欧美日韩国产一区二区| 中日韩精品一区二区三区| 久久综合激情| 亚洲国产成人不卡| 久久人体av| 不用播放器成人网| 老熟妇高潮一区二区高清视频| 亚洲国产一区二区视频| 国产成人精品无码片区在线| 久久九九精品| 一级特黄录像免费播放全99| 成人综合日日夜夜| 隔壁老王国产在线精品| 黄色的视频在线免费观看| 欧美色区777第一页| 秋霞欧美一区二区三区视频免费| 国产精品91一区二区| 乱人伦xxxx国语对白| 精品国产一区二区三区香蕉沈先生| 国产精品久久久久77777| 男女啪啪在线观看| 精品久久国产老人久久综合| 国产成人精品网| 欧美韩日一区二区三区| 欧美一区二区三区影院| 日韩视频一区| 亚洲一区二区免费视频软件合集| 欧美日韩黄网站| 欧美中文字幕在线视频| 男人的天堂在线视频免费观看 | 亚洲一区久久久| 九色porny丨首页入口在线| 国产亚洲激情视频在线| 精品人妻无码一区二区| 日本高清免费不卡视频| 国产精品免费在线视频| av色综合久久天堂av综合| 免费涩涩18网站入口| 国产精品magnet| 蜜桃精品久久久久久久免费影院 | 51一区二区三区| 欧美福利视频在线| 成年网站在线| 亚洲精品电影网站| 国产在线观看黄色| 亚洲国产精华液网站w| 亚洲男人天堂2021| 丝袜亚洲另类丝袜在线| 日韩极品视频在线观看| 水蜜桃精品av一区二区| 麻豆freexxxx性91精品| 日本不卡免费新一二三区| 日韩精品一级| 国产精品专区一| 在线手机中文字幕| 欧美国产精品人人做人人爱| 欧美性天天影视| 精品在线小视频| 性一交一乱一透一a级| 欧美日韩亚洲综合一区二区三区| www日韩精品| 一区二区三区鲁丝不卡| 日韩在线视频免费看| 久久精品一区二区三区不卡| 中国特级黄色大片| 国产一区欧美二区| 午夜激情av在线| 天堂av在线一区| 看av免费毛片手机播放| 国色天香一区二区| 成人黄色片免费| 婷婷激情综合| 一本色道久久综合亚洲精品婷婷| 国产精品亚洲片在线播放| 国产区二精品视| 岛国精品一区| 官网99热精品| 国产三级精品三级在线观看国产| 91夜夜未满十八勿入爽爽影院| 日本中文字幕视频一区| 国产精品成人国产乱一区| 中文在线а√天堂| 668精品在线视频| 久草在线资源站手机版| 欧美激情欧美狂野欧美精品| 综合图区亚洲| 久久久久久久激情视频| 羞羞电影在线观看www| 九色成人免费视频| 午夜激情在线| 久久久久免费视频| а√天堂中文在线资源8| 久久久久久久久久婷婷| 岛国av在线播放| 国产91ⅴ在线精品免费观看| 一区二区三区电影大全| 国产成人精品一区| 国产私拍福利精品视频二区| 国产精品午夜视频| 高清国产一区二区三区四区五区| 成人午夜小视频| av不卡一区二区| 久久99蜜桃综合影院免费观看| 要久久电视剧全集免费| 五月婷婷一区| 亚洲精品网址| 99在线免费视频观看| 午夜在线播放视频欧美| 手机在线免费观看毛片| 久久99精品久久久久久久久久久久| 色男人天堂av| 99久久99久久久精品齐齐| 性欧美13一14内谢| 日本一区二区成人| 久热这里有精品| 精品国产精品自拍| 一级片在线免费播放| 欧美一级二级三级乱码| 视频一区二区免费| 在线观看日韩www视频免费| 蜜桃av在线免费观看| 久久男人av资源网站| 亚洲第一影院| 97人人干人人| 国产一区二区三区电影在线观看| 一级特黄录像免费播放全99| 亚洲国产专区| 一本色道久久亚洲综合精品蜜桃| 国产精品亚洲成人| 99久久久无码国产精品性 | 999av小视频在线| 欧美最猛黑人xxxx黑人猛叫黄| 免费污视频在线一区| 91在线国产电影| 亚洲福利网站| 色乱码一区二区三区熟女 | 欧美中文在线视频| 经典三级久久| 品久久久久久久久久96高清| 欧美在线免费| 手机在线免费观看毛片| 9人人澡人人爽人人精品| 激情无码人妻又粗又大| 天天综合色天天综合| 国产欧美熟妇另类久久久| 精品一区二区三区四区在线| 亚洲综合影视| 国产精品视频资源| 欧美变态挠脚心| 成人在线免费观看网址| 日韩va亚洲va欧美va久久| 小毛片在线观看| 亚洲欧美日韩国产综合在线| 波多野结衣视频在线观看| 欧美精品一区二区蜜臀亚洲| 国产在线高清视频| 国产精品福利小视频| 色天天色综合| 日韩精品在线中文字幕| 国产一级精品在线| 日本成人免费在线观看| 色94色欧美sute亚洲线路一久| 日韩专区第一页| 色综合天天综合网国产成人网| 深夜日韩欧美| 亚洲看片网站| 青青草91视频| 无码一区二区三区在线| 好吊成人免视频| 男人天堂网在线视频| 久久不射热爱视频精品| 只有精品亚洲| 国产高清精品软男同| 日本成人在线电影网| 中文字幕在线1| 色综合久久久久综合体| 四虎影院在线播放| 欧美性受xxxx白人性爽| 加勒比色老久久爱综合网| 国产视频在线观看网站| 成人在线视频一区| 成人免费看片98| 精品电影一区二区| av在线不卡免费| 精品久久精品久久| 夜夜嗨一区二区| 亚洲午夜福利在线观看| 色狠狠综合天天综合综合| 国产日本在线| 国产精品一区专区欧美日韩| 日韩av大片| 欧美日韩精品区别| 亚洲免费在线电影| 亚洲AV无码成人片在线观看| 欧美激情一二区| 欧美成人午夜77777| 人妻无码视频一区二区三区 | 日韩av在线免费观看| 玖玖在线播放| 涩涩涩999| 久久99精品久久久久| 欧美日韩中文字幕在线观看| 精品少妇一区二区三区在线播放 | 欧美在线不卡视频| 男人天堂久久久| 成人欧美一区二区三区视频 | 久久亚洲在线| 日日夜夜精品视频免费观看| 亚洲韩国一区二区三区| 日本天堂在线| 国产精品自拍小视频| 中文在线播放一区二区 | 国产精品探花视频| 欧美激情喷水视频| 国产成人精品免费视| 国产三级国产精品国产专区50| 亚洲卡通欧美制服中文| 天堂在线观看av| 国产精品美女主播在线观看纯欲| 999久久久91| 欧美精品欧美极品欧美激情| 欧美在线视频你懂得| 色黄网站在线观看| 欧美aaaaa喷水| 国产尤物一区二区| 91av在线免费视频| 色偷偷偷亚洲综合网另类| 第四色在线一区二区| 精品久久久久久中文字幕2017| 国产精品久久久久久久久免费桃花 | 欧美精品电影在线播放| av资源中文在线| 一区二区免费电影| 99久久免费视频.com| 一级片免费网站| 欧美一级在线亚洲天堂| 亚洲h色精品| 88久久精品无码一区二区毛片| 日韩欧美成人午夜| 99久久精品一区二区成人| 成人性免费视频|