【发布时间】:2023-02-17 22:53:26
【问题描述】:
我有一个在 Docker 中运行的 Spring Boot 应用程序,它的处理似乎很困难,我需要修复它。
无论如何,为了了解瓶颈在哪里,我做了一个简单的top,我看到我的 Java 进程在 4 核机器上使用 100% 的 CPU。够好了,我想我需要并行化一些昂贵的操作,以便分布在多个内核上。
问题是,即使我的主要 Java 进程似乎最大化了大约 100%,在机器方面我看到所有 4 个内核都使用了大约 25%。
我显然不是 Docker 或 JVM 方面的专家,但我必须为此做点什么:/
在我看来,我的 JVM 似乎只看到 1 个核心,但 docker 设法将工作分散到所有核心。
关于可能发生的事情的任何想法?
哦,关于版本,它运行的是 Docker 17.05、JDK 7。我可能会更新 Docker 但不会更新 Java :(
【问题讨论】:
-
你在这里所说的还不是问题的迹象。您试图解决的最初问题是什么?
-
基本上,该应用程序使用 AMQ 消息并使用它们执行各种 Mongo 操作。以前跑的还不错,现在因为数据输入大了,就积累了延迟。我看到 java 进程卡在 98~102% CPU 使用率左右,就好像它在使用单核一样。但在机器方面,所有核心都在 25% 左右。我的 Java 进程没有使用 150% 的 CPU 可能是有原因的,这可能与 Docker 有关。 + 我觉得奇怪的是,这个过程似乎只使用一个核心,尽管它的“工作量”分布在所有 4 个核心上。
-
好的,这些信息应该首先出现在问题中(请相应地编辑帖子)。这个问题根本与 Docker 无关。如果应用程序与 Mongo 通信,它可能会等待 Mongo 响应,因此无法在一个线程中使用 100% 的 CPU。您的应用程序中有多少工作线程?你试过分析吗?
标签: java docker jvm cpu cpu-usage