如何让所有进程在 Ubuntu 的每个 CPU 核心上运行?

Roh*_*nil 11 linux cpu process top ps

我在 Ubuntu14.04 服务器上工作,它有 48 个 CPU 内核。我从 sar 信息中看到一个核心上的 CPU 使用率很高。所以我想知道在那个核心上运行了哪些进程。我应该如何让所有进程在 Ubuntu 的每个 CPU 内核上运行?

dai*_*isy 14

你可以用 来做到这一点ps -aeF,请参阅C专栏

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0  2015 ?        00:08:07 /sbin/init
Run Code Online (Sandbox Code Playgroud)

或者使用htop,将其配置为显示PROCESSOR列,

在此处输入图片说明

要设置 CPU 亲和性,您可以使用taskset命令


小智 7

Normaltop也可以显示上次使用的 CPU。

您必须f在查看主屏幕时按 进入字段管理屏幕,向下箭头P = Last Used CPU (SMP)并使用d或 空格将其打开。按q或退出返回主屏幕。

如果您不喜欢输出最右侧的 P 列,您可能希望在“字段管理”屏幕中向上移动 P 列。


use*_*018 5

意识到这已经过时了,但是对于那些想要通过 ps 命令查看哪些进程正在使用哪个核心的人来说,您想要的列是 psr。C是CPU利用率。

核心编号为 0-N。您可以通过以下方式查看核心详细信息:

cat /proc/cpuinfo
Run Code Online (Sandbox Code Playgroud)

假设您有 4 个核心,并且您希望查看使用第 4 个核心的所有进程:

CORENUM=3; ps -e -o pid,psr,cpu,cmd | grep -E  "^[[:space:]][[:digit:]]+[[:space:]]+${CORENUM}"
Run Code Online (Sandbox Code Playgroud)

分解上述命令。

创建变量“CORENUM”并将其设置为“3”(第四个核心)。以分号结束语句(您可以在此处按 Enter 键)。

运行 ps 命令,其中: -e = 选择所有进程 -o = 用户定义的格式。它由一个或多个以逗号分隔的格式说明符组成。这些可以在 ps man (“man ps”) 页面的标准格式说明符部分找到

(使用正斜杠在手册页中进行搜索)。

要查看它们的原始列表,您可以输入“L”选项(不带“-”):

ps L
Run Code Online (Sandbox Code Playgroud)

因此,这里我的用户定义格式列出了进程 ID,后跟处理器,然后是 CPU 利用率,最后是命令。

然后将其通过管道传输到 grep,其中我使用 -E 选项启用扩展 regx,以尝试准确地仅输出与 CORENUM 变量中存储的 cpu 编号关联的那些进程。