如何檢視某執行緒執行於哪個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用於顯示...