我在Linux服务器上使用多少个内核?


30

我只是想知道如何在bash中找出用户现在在Linux服务器上使用了多少个CPU内核?

我正在向服务器提交大量的后台作业,因此如果我提交的正在运行的作业(进程)太多,我想写一个bash脚本在提交作业之前检查一下,因为我必须让其他用户有足够的核心可用于其工作。我想知道什么bash命令可以告诉我我的工作正在使用多少个内核。

谢谢并恭祝安康!

Answers:



26

我不知道它是否有帮助,但是您可以使用该mpstat实用程序按单个处理器(或核心)获取CPU使用率的细分。例如:

$ mpstat -P ALL 1

12:49:59 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
12:50:00 PM  all    7.89    0.00    1.25    0.88    0.00    0.00    0.00   89.97   1359.00
12:50:00 PM    0   14.00    0.00    0.00    0.00    0.00    0.00    0.00   86.00   1043.00
12:50:00 PM    1   15.84    0.00    7.92    3.96    0.00    0.99    0.00   71.29    297.00
12:50:00 PM    2    3.96    0.00    0.00    1.98    0.00    0.99    0.00   93.07      0.00
12:50:00 PM    3    3.96    0.00    0.99    2.97    0.00    0.00    0.00   92.08      0.00
12:50:00 PM    4    4.00    0.00    0.00    0.00    0.00    0.00    0.00   96.00      0.00
12:50:00 PM    5    4.95    0.00    0.99    0.00    0.00    0.00    0.00   94.06     18.00
12:50:00 PM    6   10.89    0.00    0.99    0.00    0.00    0.00    0.00   88.12      0.00
12:50:00 PM    7    5.05    0.00    0.00    0.00    0.00    0.00    0.00   94.95      0.00

在这个例子中,你可以看到,CPU的016正在做更多的工作比他们的休息。有时您会看到单个CPU接近(或处于100%),而其他CPU则为零。这可以指示单线程的程序(或程序的一部分),并且一次只能使用一个CPU。

mpstat在Fedora,RHEL或CentOS系统上安装,请使用yum install sysstat


感谢一百万人提供此答案!我的同事们一直在使用“ top”命令,并对处理器利用率做出所有错误的结论,直到我向他们展示mpstat命令为止。
导航

在Ubuntu上不可用:# aptitude search mpstat #
Alix Axel 2012年

2
@AlixAxel尝试aptitude search systat代替。
马特·索尔尼特

@MattSolnit:仍然没有运气。
Alix Axel 2012年

mpstat由sysstat DebianUbuntu 上的软件包提供。我希望大多数Debian派生的发行版使用相同的软件包名称。在Debian衍生的发行版上,以开头apt-cache search --full mpstat
CVn

2

除非明确配置为不将其固定(即,将进程固定到特定的CPU),否则可以假定所有内核一直处于使用状态。调度程序将为进程分配下一个可用内核。举例来说,“系统监视器”(GNOME的一部分)显示了我的机器所有4个内核的负载几乎相同。


我正在向服务器提交大量的后台作业,因此如果我提交的正在运行的作业(进程)过多,我想编写bash脚本在提交作业之前进行检查,因为我必须让其他用户拥有有足够的核心可用于其工作。所以我想知道什么bash命令可以告诉我我的工作现在使用了多少个内核。
蒂姆

3
我认为您不理解我的回答。使用的内核数始终是可用内核总数。使用总体系统负载作为确定是否应限制您的作业提交的因素。
EmmEff

谢谢!我确实检查了整个系统的负载。我的一位同事告诉我,我无法用完所有内核,因为谁知道其他人很快就会开始工作,我的工作将持续很长时间。您是否还认为我必须限制使用的内核?
蒂姆(Tim)

2

因此,您将在此处看到一些响应,这些响应将告诉您如何利用内核。

但是-这并不是真正为您提供服务。您已经做出了一个基本假设,即该假设不成立-您的工作将倾向于将自己归为一组核心。

取而代之的是,您的工作将分散在所有核心中,除非您执行某种使它们“固定”下来的工作。(注意:我不建议这样做;只是说“除非”)

这是一种替代策略:当您认为其他用户“可以接受”添加更多作业时,为您的特定系统确定LOAD级别是什么。然后,构建一些仅在负载水平低于该限制时才提交新的后台作业的东西。

这样,该解决方案将是独立于核数的,更可移植的,更灵活的并且也更容易“调整”。


我刚才注意到您在另一位发帖人的回答中添加了一条评论,表明这是由于一位同事告诉您的。因此,事实上,似乎误解是他的,而不是你的。对于那个很抱歉!
pbr

谢谢!至于“确定您的特定系统在您认为其他用户“可以接受”添加更多作业时的负载水平”,如果当前负载主要不是由我正在运行的作业引起的,那么我会更愿意使用其余的CPU,但是如果在当前负载下我的正在运行的作业占用了相当数量的钱,那么我可能不得不放弃使用其余的CPU。因此,您是否仍然认为我不必估算所有正在运行的作业的CPU使用率?
蒂姆(Tim)2009年

不,我真的不认为区分当前工作量与其他工作之间的关系是没有道理的。考虑简单性:您的工作试图成为一个好公民,并且只有在工作量低于您认为可以接受的水平时才提交工作。这个主意是永远不要利用所有剩余容量。使其他未来的用户陷入困境。理想情况下,所有用户都将为此使用相同的逻辑。
pbr

2

如果要这样做,使其可以在linux和OS X上运行,则可以执行以下操作:

CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)

1

您可以通过运行top,敲击' U'并指定您的用户名,然后将前几个进程的CPU利用率相加,来获得大致的估算值。


我想知道一个可以告诉我数字的bash命令,因为我想在bash脚本中使用它。
蒂姆

@Tim top可以使用-b开关以批处理模式运行。将其与-n开关结合使用以获得所需的迭代次数。
nagul

1
您能否举一个示例代码来获取用户提交的所有作业(进程)所使用的内核数?
蒂姆(Tim)

@Tim没问题。我要么必须通过解析top输出来编写这样的脚本,要么要通过Google来查看是否有人已经完成了该脚本。但是,我不认为这样做值得付出努力,因为考虑到上下文切换发生的速度,我认为每次运行都会获得不同的输出。系统负载指标不够好吗?它有效地告诉您处理进程队列(等待CPU的进程)需要多少个虚拟核。
nagul

@ nagul:是的,系统负载很好,我也检查了一下。但是,有些人不断告诉我,我无法用尽所有内核,因为谁知道其他人很快就会开始工作。所以我想我必须限制我使用的内核。顺便说一句,您是否看到在线脚本检查CPU和内存负载并根据使用情况动态提交作业?我已经找他们好久了。谢谢!
蒂姆
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.