在Linux上,如何判断该计算机有多少个核心处于活动状态?


14

在Linux上,如何判断该计算机有多少个核心处于活动状态?我认为对此进行测试也适用于Android。我需要知道是否有多个核心处于活动状态。我想通过一个进程创建多个线程来测试这一点。线程可以查询它在哪个处理器上吗?这样一来,就可以判断在重负载下是否会使用多个内核。不知道我是否走对了。


1
通过“活动”,我假设您的意思是当前正在使用多少个内核?或者您是说系统有多少个核心?
Mikel

是的,我想告诉您当前有多少个使用

Answers:


19

您可以使用top列出每个核心的利用率。如有必要,请按1,以将每个内核的CPU行拆分为单独的行。

您还可以添加一列,以显示每个进程的最后使用的核心。按f调出字段列表,然后按j激活“ P”列。然后按空格键返回实时视图。


因此,也许我应该编写并运行产生许多线程的程序,然后在控制台中运行“ top”命令?
likejudo 2011年

我认为应该可以。top进入时只需按H 即可单独列出线程。或者,您可以编写一个无限循环的程序并运行多次。
布莱恩

说,我编写程序以产生100个线程,每个线程执行一些长时间的密集计算。如果用Java(Android)编写,是否可以保证JVM / KVM在不同的内核上运行线程,并在所有内核上运行线程?
likejudo 2011年

1
我不知道-这不是您的实验应该弄清楚的吗?
布莱恩(Brian)

我需要测试一个程序,该程序将限制所使用的处理器内核数量。我将搜索更多。谢谢!
likejudo 2011年

6

ps有一个名为的字段,psr用于告诉您作业在哪个处理器上运行。

因此,您可以使用类似:

ps -e -o psr= | sort | uniq | wc -l

注意,仅仅这样运行ps当然会使至少一个核心处于活动状态。

可能更好的方法是运行以下命令:

tmp=/tmp/ps.$$
ps -e -o psr= > /tmp/ps.$$
sort -u "$tmp" | wc -l
rm "$tmp"

这种方式,sort并且wc不增加计数。


如果系统具有16个内核,但没有人使用某些内核,该怎么办?

然后打印0,因为它们都不在使用中。我认为这就是问题的所在。
Mikel

没有看到有关该问题的新评论。

1
当然,通过运行,ps我们可以使至少1个核心处于活动状态。;-)
Mikel

感谢您的回答。缺点是我需要知道是否有多个内核处于活动状态。我想通过一个进程创建多个线程来测试这一点。是否有可能为一个线程来查询它是在哪个处理器?这样一来,您就可以判断是否会在重负载下使用多个内核。不知道我是否走对了。


2

请尝试以下操作:

cat /proc/cpuinfo

这是一个指向 Android Java示例的链接


1
通过“活动”,我假设Anil表示当前正在使用多少个核心,有多少个处于空闲状态,即系统的繁忙程度的近似值。 /proc/cpuinfo只是告诉您系统有多少个内核,甚至您cat /proc/cpuinfo还需要做更多的工作来解决超线程问题。
Mikel

好的-不清楚,但您是对的。
阿米尔·阿富汗尼

0

您可以使用cat / sys / devices / system / cpu / possible或cat / sys / devices / system / cpu / online。可能主要是因为您隔离了一个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.