【问题标题】:Docker Java 8 Container with Heavy CPU Usage占用大量 CPU 的 Docker Java 8 容器
【发布时间】:2017-02-23 16:22:34
【问题描述】:

我们目前正在对 Java 8 应用程序进行 dockerize 处理,但我们的行为非常奇怪。在 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,构建 dfed245
  • 服务器操作系统: CentOS

【问题讨论】:

  • 如果您在主机上运行 top 而应用程序在 docker 容器中运行,java 进程是否显示为使用 100% CPU?
  • 是的,就是这样!
  • 如果您执行kill -3 <pid> 其中pid 是java 进程,您将获得线程转储。线程转储看起来很奇怪吗?就像它在尝试做网络或 I/O 时卡住了?
  • 执行kill -3 pid时没有输出,正常吗?
  • 如果你运行 docker logs <container> 它应该有输出

标签: java docker dockerfile


【解决方案1】:

正如我们在聊天中所讨论的,Java 应用程序中有一个线程在紧密循环中旋转,因为没有用户输入。停止该线程会导致 CPU 回到它所属的位置。

【讨论】:

  • 但是为什么这只发生在 docker 内部?
猜你喜欢
  • 1970-01-01
  • 2011-11-17
  • 2021-08-21
  • 1970-01-01
  • 2022-10-20
  • 2014-12-11
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多