如何才能知道 Linux 中用户使用的处理器总数?

如何才能知道 Linux 中用户使用的处理器总数?

我如何知道 Linux 中用户使用的处理器总数?例如:用户“X”运行 2 个(或更多)进程,总共使用 3 个处理器。我如何知道?如果不可能,那么我如何知道用户可以使用多少个处理器?例如:用户“X”使用 2 个处理器(可能为 8 个)打开会话。

我需要编写一个 Perl 函数来获取用户名(例如“root”)并返回标量数 - 可能情况之一:1. 使用的用户处理器总数(例如 8 中的 2 个)2. 使用的用户核心总数 3. 用户可用的处理器在我的情况下,用户运行一个(可能更多,但不多)运行几天的大进程,我想知道(特殊用户的)进程如何加载机器......因为如果他使用了太多资源,那么我需要阻止他......

答案1

无法判断某个程序使用了哪些内核。CPU 会根据大量因素自动、不可见地将线程分配给内核,并进行大量操作,使一切看起来都同步运行,即使在为每个线程分配处理时间时存在一些时间分片。

归根结底,会话不能映射到一组核心。您可以将会话映射到在一个或多个核心上运行线程的程序的使用,但这严格取决于所有进程的当前状态。

这并不是说您为 sally 分配 2 个核心,为 bob 分配 2 个核心,为 tom 分配 4 个核心,导致“核心用尽”。sally、Bob 和 Tom 的程序都可以使用最多 8 个核心,系统将决定如何最佳地将线程分配给处理设施。

答案2

您可以使用sched_getaffinity 和 sched_setaffinity查找允许用户进程运行的核心。但这并不意味着它将在所有核心上运行。

您可以通过在以下方式启动进程来限制进程可以在哪些核心上运行:中央处理器(某个特定部分)控制群组

例如参见本指南关于如何在 Red Hat 6 中将进程添加到 cgroup 以及本指南如何有效地对每个组(或者每个用户)进行 CPU 和内存的划分。

如果你只是对获取特定用户使用的 CPU% 感兴趣,你可以使用这个命令:

top -b -n 1 -u <username> | awk 'NR>7 { sum += $9; } END { print sum; }'

相关内容