获取Linux进程运行在哪个CPU内核上面的方法
首先,当某些时候,在一段程序或者借助第三方软件进行程序协助的时候,在性能的优化,以及程序bug的排除上面,可能会想知道该程序执行的进程被调度到了哪一个CPU内核进行工作,从而可以推断是否是受限于硬件还是受限于程序。下面有四种方法,查看进程具体运行的位置:
第一种:
taskset命令:
首先使用:ps -ef 查看系统具体进程情况:
我们想知道上面的chrome浏览器具体CPU内核情况:
使用如下命令:taskset -c -p <pid>
接下来输入:
taskset -c -p 6460
可以得到如下(本机是CPU核数为4核):
这是因为chrome进程并没有明确的被固定在某个CPU内核上,所以告诉我们,该进程可能被运行在0~3任何一个CPU内核之上。
如果,某个进程被明确固定了在某个CPU内核上,则会输出:
pid 6460's current affinity list: 2 (假设)
输出这个表明,该进程被固定在CPU内核2上
上面的第一种方法,使用taskset命令,对于进程没有固定在具体CPU内核上的时候,是无法得出该进程此时处于哪个CPU内核,我们可以采取第二种方法:
第二种:
使用命令: ps -o pid, psr, comm -p <pid>
该命令可以明确的告诉你线程或者进程此时所在CPU内核的 ID。
请看实例:
输入:
ps -o pid, psr, comm -p 6460
可以看到:进程的PID为6460此时在CPU内核2上面运行。(注意是“此时”,因为该进程没有被固定,所以会随着系统的调度而发生变化)
在第二种方法中,我们仅仅是可以查看该进程你查看时刻处于哪个CPU内核中,无法实时的看到随着系统调度,CPU内核的变化情况。如果需要看到实时的变化情况,可以使用第三种方法:
第三种:
使用命令:top
top 命令也可以显示 CPU 被分配给哪个进程。首先,在top 命令中使用“P”选项。然后按“f”键,显示中会出现 “Last used CPU” 列。
请看实例:
top -p 6460
我们可以监视到随着时间和系统调度的改变,CPU的自动分配情况是怎么样的
接下来,我们有时候需要查看CPU内核以及系统内存或者交换区的使用情况来对整体的负载进行判断,我们可以使用第四种方法:
第四种:
使用命令:htop
这个命令可以详细的列出计算机的各个CPU内核的使用百分比,以及内存的使用百分比,swap区域的使用百分比
请看实例:
输入:
htop
注意:这里看到上面CPU内核的使用情况是从 1~4,这个和上面三种方法从0~3是一样的,只是对应的起始编号不同。