我只是想知道如何在 bash 中找出用户现在在 Linux 服务器上使用了多少个 CPU 内核?
我正在向服务器提交大量后台作业,因此我想编写一个 bash 脚本,在提交作业之前检查我提交的正在运行的作业(进程)是否太多,因为我必须让其他用户有足够的核心来用于他们的作业。我想知道哪个 bash 命令可以告诉我我的作业现在使用了多少个核心。
感谢致敬!
答案1
为了获得CPU 数量核心每个 CPU:
grep "^core id" /proc/cpuinfo | sort -u | wc -l
或者获取数量身体的CPU:
grep "^physical id" /proc/cpuinfo | sort -u | wc -l
答案2
我不知道这是否有帮助,但您可以使用该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 0
、1
和6
正在执行比其他 CPU 更多的工作。有时您会看到单个 CPU 接近(或达到)100%,而其他 CPU 则为零。这可能表明程序(或程序的一部分)是单线程的,并且一次只能使用一个 CPU。
mpstat
要在 Fedora、RHEL 或 CentOS 系统上安装,请使用yum install sysstat
。
答案3
除非明确配置为不这样做(即,将进程固定到特定 CPU),否则可以假定所有核心始终处于使用状态。调度程序将为进程分配下一个可用核心。例如,“系统监视器”(GNOME 的一部分)显示我的机器的所有 4 个核心的负载几乎相同。
答案4
如果您想这样做以使其在 Linux 和 OS X 上运行,您可以执行以下操作:
CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)