Linux 檢視執行緒執行於哪個CPU核心上

2021-09-26 10:56:39 字數 2053 閱讀 1919

如何檢視某執行緒執行於哪個cpu核心上呢?

方法一:ps -elf 查詢 psr 字段值

[test1280@localhost 20190227]$ ps -elf

uid         pid   ppid    lwp  c nlwp    sz   rss psr stime tty          time cmd

root          1      0      1  0    1  4836  1548   2 feb25 ?        00:00:02 /sbin/init

root          2      0      2  0    1     0     0   2 feb25 ?        00:00:00 [kthreadd]

root          3      2      3  0    1     0     0   0 feb25 ?        00:00:00 [migration/0]

……測試**:

main.c

#define _gnu_source

#include

#include

#include

#include

#include

void *start_routine(void *arg)

}int main()

return 0;

}執行輸出:

[test1280@localhost 20190227]$ gcc -o main main.c -lpthread

[test1280@localhost 20190227]$ ./main

……main: i am main

main: i am main

thread: i am threadmain: i am main

main: i am main

……檢視此程序中兩個執行緒執行於哪個cpu核心上:

[test1280@localhost 20190227]$ pidof main

11819

[test1280@localhost 20190227]$ ps -elf | grep 11819

test1280  11819  11053  11819  0    2  4115   476   2 13:43 pts/1    00:00:00 ./main

test1280  11819  11053  11820  0    2  4115   476   3 13:43 pts/1    00:00:00 ./main

test1280  11823  11468  11823  0    1 25829   844   2 13:43 pts/2    00:00:00 grep 11819

在 pid = 11819 的程序中:(參照 ps -elf 輸出字段順序)

1)tid = 11819 的執行緒在執行 ps 命令時執行於 #2 cpu 核心上;

2)tid = 11820 的執行緒在執行 ps 命令時執行於 #3 cpu 核心上;

man ps

psr      processor that process is currently assigned to.

1方法二:top -hp $pid 並修改監控字段

1.執行 top -hp $pid

[test1280@localhost 20190227]$ top -hp 11819

12.鍵入 f(或者f)

3.鍵入 j(或者j)

4.回車確認 && 觀察

我們發現,pid = 11819 的執行緒執行於 #3 cpu 核心上,與上次 ps -elf 的 psr 不同,發生了切換。

方法三:taskset -pc $pid

方法一、二都是執行查詢命令那一時刻,執行程序(執行緒)執行於某cpu核心的快照。

方法一、二並不能反映出待查詢執行緒能執行於哪些cpu核心,即可執行cpu核心的集合。

可通過 taskset -pc $pid 來獲取某執行緒與cpu核心的親和性(執行緒在執行中可能執行於cpu核心的集合)。

請參考 taskset 命令 檢視。

Linux檢視埠被哪個程序占用

今天,玩cassandra需要用到它自帶的nodetool來檢視集群的情況,執行之後發現出錯,說error connection to remote jmx agent。之前為了圖方便,8080埠被占用,直接把jmx從啟動引數中去掉了。於是把機器上的jboss apache給kill掉了。本以為應用...

Linux檢視程式被哪個埠占用

原因 最近裝mongodb,啟動的時候,總是報錯 執行命令 mongod f mongodb.conf 報錯資訊 listen bind failed errno 98 address already in use for socket 0.0.0.0 27017 這說明27017的埠已經被程式占用...

linux檢視埠被哪個程式占用

lsof i 用以顯示符合條件的程序情況,lsof list open files 是乙個列出當前系統開啟檔案的工具。以root使用者來執行lsof i命令,如下圖 lsof i 埠號,用於檢視某一埠的占用情況,比如檢視22號埠使用情況,lsof i 22,如下圖 netstat tunlp用於顯示...