我们目前正在对一个 Java 8 应用程序进行 docker 化,但我们有一个非常奇怪的行为。在 Docker 之外,应用程序使用不到 10% 的 CPU,但是当我们将应用程序运行到容器中时,容器的 CPU 使用率为 100%。
在容器内部(使用 docker exec -it [container-id] top
),jar 仅使用 10% 的 cpu。
我们尝试使用其他基础 docker 镜像,例如 openjdk
,但它没有任何改变。
Docker 文件:
FROM anapsix/alpine-java:8
ADD . /producer
WORKDIR /producer
COPY ikb-1.0-SNAPSHOT-producer.jar ikb-1.0-SNAPSHOT-producer.jar
COPY resources/ /resources/
CMD ["java", "-jar", "ikb-1.0-SNAPSHOT-producer.jar"]
我们使用:
- Docker 版本:1.13.1,build 092cba3
- Docker-compose 版本:1.11.2,build dfed245
- 服务器操作系统: CentOS
最佳答案
正如我们在聊天中所讨论的那样,Java 应用程序中有一个线程因为没有用户输入而一直在紧密循环中旋转。停止该线程会导致 CPU 返回到它所属的位置。
关于java - CPU 使用率高的 Docker Java 8 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42421109/