Linux 机器 CPU 使用率高

Linux 机器 CPU 使用率高

我有一段 Java 代码在两台不同的机器上运行,但在其中一台 Linux 机器上,该代码占用了大量 CPU(接近 100% 的 CPU 使用率)。在另一台机器上,相同的代码占用的 CPU 较少(低于 3% 到 4%)。CPU 使用率高的机器是一台更强大的机器,拥有更多的 CPU 和内存。这种情况最近开始出现,并且 CPU 使用率高的机器的性能显著下降。我想知道是否有人知道为什么会发生这种情况,这背后的可能原因等。有什么猜测吗?最近没有对硬件进行任何更改,也没有更新代码。

答案1

如果您怀疑硬件出现故障,请检查 dmesg 是否有任何输出。根据硬件供应商的不同,可能会有某种 IPMI 实现(如戴尔的 DRAC),其 Web 界面会显示出现故障的硬件。

说实话,这可能是你的应用程序的一个错误。“添加计时器钩子,找到瓶颈。”

答案2

  • 验证两个节点上部署的应用程序是否完全相同。
  • 验证两个节点上的两组 JVM 设置和应用程序配置是否相同(如果适用)
  • 验证两个节点上的硬件配置和规格是否相同。(CP​​U/RAM/磁盘)
  • 验证 LB 确实在提供循环服务。查看两个应用程序的日志文件,检查传入请求是否均匀分布
  • 如果以上均未引发任何问题,则在较慢的机器上运行 jProfiler,并将其报告给应用程序开发人员(如果可能)。
  • 监控两台机器上的所有进程。

LB 请求已发送至节点 1 | 节点 1 硬件规格 1 | 节点 1 应用已部署 |


LB 请求已发送至节点 2 | 节点 2 硬件规格 2 | 节点 2 应用已部署 |

如果确实一切正常,那么您需要考虑应用程序请求中发送的数据模式发生了变化。

仔细检查 LB 用于分配呼叫的方案,验证它不依赖于数据。

在两个 JVM 上运行 jProfiling,在 OS 上运行 Top 或类似程序,并监控 mysql 日志文件。

相关内容