假设我们有一个名为的 CPU 密集型应用程序multi-threaded-application.out
,它运行在 Ubuntu 上,PID 为 10000。它有 4 个线程,tid 分别为 10001、10002、10003 和 10004。我想知道,在任何给定时间,哪个线程核心这些线程中的每一个都被调度?
我尝试过/proc/<pid>/tasks/<tid>/status
,但找不到有关负责运行给定线程的核心 ID 的任何信息。
这个问题在某种程度上是相关的到这个。
任何帮助将非常感激。
答案1
下面的命令就达到了目的:
ps -mo pid,tid,%cpu,psr -p <main process ID>
选项解释:
-m
- 在进程之后显示线程-o
- 用户定义的格式,显示进程 ID、“代表可分派实体的唯一编号”(线程 ID)、CPU 利用率以及进程所在的处理器现在分配给-p
对于给定的进程 ID
以上ps
仅适用于 Linux,不适用于 macOS/BSD。
答案2
如果top
您点击h
获取帮助菜单,它会解释...
F
对于字段- 带有 的内容
*
是标记为要显示的内容 - 寻找
P
哪个是最后使用的 CPU (SMP)- 使用键盘上的向下箭头键将突出显示向下移动,然后按空格键将其
P
添加到*
- 使用键盘上的向下箭头键将突出显示向下移动,然后按空格键将其
- 点击 escape 返回到运行顶部显示,注意
P
与 cpu 核心编号相对应的新列 H
切换线程开关s
要更新显示延迟,我喜欢 1 秒而不是默认的 3 秒,如果您愿意,可以选择 0.1i
打开/关闭空闲进程;u
对用户进行过滤;o
自定义过滤器W
保存此 top 配置,以便P
从现在开始运行 top 时该列显示。