【发布时间】: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