1. 程式人生 > >linux下檢視跟蹤執行緒

linux下檢視跟蹤執行緒

假設程序為my_process:

# ps -ef|grep my_process
root     10001  3322  0 14:05 ?        00:01:19 my_process
root     26844 23970  0 17:12 pts/0    00:00:00 grep my_process

1) 通過ps命令檢視執行緒,SPID是執行緒ID,STAT是執行緒狀態
# ps H -T -p 10001
  PID  SPID TTY      STAT   TIME COMMAND
10001 10001 ?        Sl     0:00 my_process
10001 10023 ?        Sl     0:00 my_process
10001 10229 ?        Sl     0:00 my_process
10001 10282 ?        Sl     0:04 my_process
10001 10283 ?        Sl     0:02 my_process
10001 10284 ?        Sl     0:01 my_process
10001 10285 ?        Sl     0:02 my_process
10001 10286 ?        Sl     0:04 my_process
10001 10287 ?        Sl     0:04 my_process
10001 10288 ?        Sl     0:00 my_process
10001 10289 ?        Sl     0:00 my_process
10001 10290 ?        Sl     0:00 my_process


2) 通過top命令檢視執行緒資源佔用,PID是執行緒ID
# top -H -p 10001
top - 17:14:54 up 9 days, 21:54,  2 users,  load average: 0.07, 0.07, 0.05
Threads:  51 total,   0 running,  51 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.7 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  4046852 total,  2947116 free,   621440 used,   478296 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  2842320 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                                                 
10300 root     -46   0 2048420 422828  19784 S  0.3 10.4   0:01.15 my_process                                                                                                                                                                    
10302 root     -98   0 2048420 422828  19784 S  0.3 10.4   0:03.01 my_process                                                                                                                                                                    
10332 root     -66   0 2048420 422828  19784 S  0.3 10.4   0:09.63 my_process                                                                                                                                                                    
10001 root     -97   0 2048420 422828  19784 S  0.0 10.4   0:00.30 my_process                                                                                                                                                                    
10023 root     -92   0 2048420 422828  19784 S  0.0 10.4   0:00.00 my_process                                                                                                                                                                    
10229 root     -11   0 2048420 422828  19784 S  0.0 10.4   0:00.29 my_process                                                                                                                                                                    
10282 root     -96   0 2048420 422828  19784 S  0.0 10.4   0:05.03 my_process                                                                                                                                                                    
10283 root     -97   0 2048420 422828  19784 S  0.0 10.4   0:02.14 my_process                                                                                                                                                                    
10284 root     -34   0 2048420 422828  19784 S  0.0 10.4   0:01.82 my_process                                                                                                                                                                    
10285 root     -34   0 2048420 422828  19784 S  0.0 10.4   0:02.32 my_process                                                                                                                                                                    

3) 通過pstack檢視執行緒back trace, 需要-g編譯包含符號表,僅適用於32位系統。   

4)通過strace跟蹤執行緒系統呼叫

strace -p pid 其中pid為執行緒ID,可以跟蹤某個執行緒

strace -fp pid其中pid為程序ID,可以跟蹤該程序的所有執行緒        

相關推薦

linux檢視跟蹤執行

假設程序為my_process: # ps -ef|grep my_process root     10001  3322  0 14:05 ?        00:01:19 my_process root     26844 23970  0 17:12 pts/0 

linux程序和執行狀態檢視

檢查 使用 ps -fe |grep programname 檢視獲得程序的pid,再使用 ps -Lf pid 檢視對應程序下的執行緒數. 查詢資料發現可以通過設定 ulimit -s 來增加每程序執行緒數。 每程序可用執行緒數 = VIRT上限/stack size

JVM調優(二)——Linux監控java執行

Linux環境下,當發現java程序佔用CPU資源非常高,且又要想更進一步查出哪一個java執行緒佔用了CPU資源時該如何做呢? 一、採用命令列形式檢視執行緒,最終用dump進行文字分析 1、top命令既可以看程序,又可以看執行緒 1、top命令找出佔用資源厲害

Linux檢視執行檔案、動態庫的ELF頭等資訊

      用法: readelf <option(s)> elf-file(s)       作用: 和Windows下的PE檔案類似,ELF檔案是linux系統下可執行檔案、動態庫檔案、靜態庫檔案的標準格式。有時候我們需要檢視ELF檔案的頭資訊,或者動態庫檔

linux的多執行/多程序同步/通訊機制

while (1) { //這個mutex主要是用來保證pthread_cond_wait的併發性 pthread_mutex_lock(&mtx); while (head == NULL) {

Linux的多執行程式設計二(執行的同步與互斥)

一、什麼叫做執行緒的同步與互斥?為什麼需要同步與互斥? 1、同步與互斥 互斥:是指某一資源同時只允許一個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。 同步:是指在互斥的基礎上(大多數情況),通過其它機制

樹莓派3B LinuxC++多執行程式設計

下面的程式碼手動建立了兩個執行緒,一個執行緒是讀取串列埠的資料,另一個執行緒是通過UDP來讀取網路通訊收到的資料。加上main函式的執行緒,一共三個執行緒。 先簡單講一下多執行緒的建立, pthread_t serial; int ser =

如何在Windows和Linux獲取當前執行的ID號

Linux下獲取當前執行緒ID號函式: pthread_t pthread_self(); 返回:當前執行緒的ID號 pthread_t 資料型別的定義如下: typedef unsigned long int pthread_t; sizeof(pthread_t) =

linux用多執行實現socket伺服器和客戶端的非同步通訊

前面介紹了用select函式來實現socket的非同步收發資料,但是select函式也有一些缺陷,要使socket能持續地通訊,select必須不停地檢測,這樣程序就會一直阻塞在這裡,限制了功能的擴充套件,這裡我們用多執行緒的方式,另建立兩個執行緒用來發送/接收

Linuxsqlite3多執行和序列模式

sqlite3支援三種模式:單執行緒模式,多執行緒模式和序列模式。 模式可在編譯,啟動時或執行時設定,一般來講,啟動時的設定會覆蓋編譯時的設定,執行時則會覆蓋啟動時或編譯時的設定。但是一旦單執行緒模式被設定之後就不能再被覆蓋了。 編譯時可通過SQLITE_T

linux核心多執行的簡單實現

#include<linux/init.h> #include<linux/module.h> #include<linux/kernel.h> #include<linux/delay.h> #include<linux/wait.h> #incl

Linuxc++多執行和互斥鎖

一、多執行緒 多執行緒使用的是pthread庫,寫程式的時候需要引入標頭檔案pthread.h, g++編譯的時候需要加上該庫的依賴“-lpthread”。 1 先看程式便於理解,程式碼下面有對註釋的解釋。下面的程式碼含義是建立兩個執行緒,一個執行緒去計算某

Linux 程序與執行的關係

一.基礎知識:執行緒和程序 按照教科書上的定義,程序是資源管理的最小單位,執行緒是程式執行的最小單位。在作業系統設計上,從程序演化出執行緒,最主要的目的就是更好的支援SMP以及減小(程序/執行緒)上下文切換開銷。 無論按照怎樣的分法,一個程序至少需要一個執行緒作為它的指令執行體,程序管理著資源(比如cpu、記

Linux的多執行程式設計

我們編譯此程式: gcc example1.c -lpthread -o example1 執行example1,我們得到如下結果: This is the main process. This is a pthread. This is the main process. This is the ma

linux 檢視某一程序的cpu使用率和這個執行中各個執行的cpu使用率

在Ubuntu/CentOS等linux系統中, 在除錯程式過程中,有時需要檢視程式的CPU的使用率和程式的各個程序的使用率. 那麼首先需要獲取這個程序的PID: ps -ef|grep [process name] 然後檢視該程序的CPU: top -p [PID]

linux 檢視執行狀態

前言 在除錯程式時需要檢視各個執行緒的狀態,方便定位問題。 解決 方法1、pstree pstree PID 方法2、top top 然後按H,會顯示執行緒 -p

Linux檢視某個程序建立了多少執行

方法一: 1. 找出程序號: cba001:/proc/21723 # ps -ef|grep named root     30659     1  0 16:45 ?        00:00:00 /opt/***/***/usr/bin/named root 

linux檢視CPU個數、核數、執行模式以及是否支援超執行技術

1.檢視物理CPU個數 #cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l 執行結果:1 2.檢視邏輯CPU個數 #cat /proc/cpuinfo |grep "processor"|wc -l 執行結果:

Linux檢視消耗CPU的執行

javaweb 專案部署後發現很耗cpu,需要查出問題所在 寫個測試程式,記相關步驟: 故意寫個死迴圈 public class TestCpu { public static void main(String[] args) { while (t

Linux/WindowsC++設定執行名字方便多執行除錯

C++多執行緒程式設計,除錯是一個大問題,原因之一就是,執行緒名字繼承了父程序的名字,因此導致同一段程式碼的不同執行緒名字一樣;而且還會導致執行緒的名字怪怪的,不好看。 因此,如果在程式碼中可以設定執行緒的名字就好了,這樣在除錯中就可以看到期望的執行緒名字,這樣便於除錯。 由於編