获取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是一样的,只是对应的起始编号不同。

posted @ 2016-12-11 15:11  ShaunChen  阅读(1872)  评论(0编辑  收藏  举报