通過命令查看CPU上下文切換情況
linux系統可以通過命令統計CPU上下文切換數據
#可以看到整個操作系統每1秒CPU上下文切換的統計
其中cs列就是CPU上下文切換的統計。當然,CPU上下文切換不等價於線程切換,很多操作會造成CPU上下文切換:
- 線程、進程切換
- 系統調用
- 中斷
查看某一個線程\進程的上下文切換
- 使用pidstat命令
常用的參數:
-u 默認參數,顯示各個進程的 CPU 統計信息
-r 顯示各個進程的內存使用情況
-d 顯示各個進程的 IO 使用
-w 顯示各個進程的上下文切換
-p PID 指定 PID
# 顯示進程5598每一秒的切換情況
其中cswch表示主動切換,nvcswch表示被動切換。從統計數據中看到,該進程每秒主動切換次數達到將近500次,因此代碼中存在大量的 睡眠\喚醒 操作。
- 從進程的狀態信息中查看
通過命令 cat /proc/5598/status 查看進程的狀態信息
voluntary_ctxt_switches: 40469351
nonvoluntary_ctxt_switches: 2268
這2項就是該進程從啟動到當前總的上下文切換情況。
查看進程線程的方法
windows
- 任務管理器可以查看進程和線程數,也可以用來殺死進程
- tasklist 查看進程
- taskkill 殺死進程
linux
- ps -fe 查看所有進程
- ps -fT -p 查看某個進程(PID)的所有線程
- kill 殺死進程
- top 按大寫 H 切換是否顯示線程
- top -H -p 查看某個進程(PID)的所有線程
Java
- jps 命令查看所有 Java 進程
- jstack 查看某個 Java 進程(PID)的所有線程狀態
- jconsole 來查看某個 Java 進程中線程的運行情況(圖形界面)
Linux系統中線程實現方式
- LinuxThreads linux/glibc包在2.3.2之前只實現了LinuxThreads
- NPTL(Native POSIX Thread Library)
可以通過以下命令查看系統是使用哪種線程實現
