哪个CPU使用率反映了真实情况?

3
我在Ubuntu上运行一个多线程Java应用程序。我想观察CPU使用情况。
从“系统监视器”中看到的读数随时间变化在大约42%左右。这是否意味着大部分CPU没有完全利用?我有8个核心。
但是,如果我在“top”命令中观察它,则显示我的Java应用程序正在使用超过%300的CPU(一个PID)。
哪个反映了我的CPU利用情况真实的图片?我想看看我的Java应用程序如何受益于线程。

听起来你的程序正在使用大约3个核心的CPU(相当于一个核心的300%,或整个8核心盒子的42%)。我会说这两个数字大致上是一致的。 - NPE
1
似乎“系统监视器”在满负荷下使用了100% = 8个内核,而顶部在满负荷下仅使用100% = 1个内核。因此,您似乎最多只有3个内核被占用到极限。 - piet.t
可能42%的数字与处理器有关,而300%(8 x 42 = 336)是指单个核心。 - user1196549
跨站点重复:https://superuser.com/questions/174660/why-is-the-cpu-usage-reported-by-top-in-linux-over-100 - Jiri Tousek
除此之外:当这些线程正在进行大量等待(例如等待IO)时,更多的线程才能带来更好的结果。 - GhostCat
显示剩余2条评论
1个回答

4

默认情况下,Linux 上的 top 命令以所谓的 IRIX 模式运行。

开启 IRIX 模式后,1 个完全利用的核心为 100%,3 个核心为 300%。 关闭 IRIX 模式后,1/8 个完全利用的核心为 12.5%。 这意味着在 top 中显示超过 300%,而在 "System Monitor" 中为 40%。

您可以在 top 运行时使用 Shift+i 切换 IRIX 模式。这将使数字匹配。


太棒了!这是否意味着我仍然可以增加线程数量,进一步加快我的应用程序的速度? - user697911
我将线程数量从10增加到20,CPU 使用率仅从40%增加到50%。我将尝试50个线程。但是我需要等待来看看我的应用程序是否实际上能在更短的时间内完成。 - user697911
不幸的是,即使使用更多的线程来更好地利用CPU,时间并没有缩短。 - user697911
@user697911,针对8个核心的CPU,我建议最多使用16个线程,因为该CPU具有16个虚拟核心。超过这个数量将会强制JVM频繁切换,这会增加CPU的使用率,但并不会提高性能。选择12-14个核心应该是最佳的。如果您真的想要将使用率提高到100%,请尝试更改您的电源设置以提高总体性能。 - Dynamitos
从更理论的角度来看,你可以看一下阿姆达尔定律:https://en.wikipedia.org/wiki/Amdahl%27s_law。其要点是增加资源使用并不会线性加速,甚至更糟的是会受到限制。 - Adonis
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接