【发布时间】:2023-01-08 04:13:26
【问题描述】:
在分布式 API 的上下文中,我正在处理一个“Giga”服务,它消耗大约 15 Gb 的内存并且至少需要四个 CPU。在引导过程中,服务必须加载四个文件才能可用。
在我的笔记本电脑上,当我在没有 docker 的情况下运行该服务时,我的意思是,当我从 shell 运行它时,该服务需要大约 9 秒才能激活。服务激活后,对该服务的 240 次调用大约需要 7 秒。
现在,当我在笔记本电脑上运行完全相同的服务时,但这次是在 Docker 容器下,加载文件并激活需要大约 6 分钟。当我准确执行上述 240 次调用时,服务大约需要 5.5 分钟!!!!
这是我第一次发现类似的问题,而且由于我不是 Docker 大师,我想知道是否有人可以给我提供有关可能发生的事情的线索。
这是 Dockerfile 的内容:
FROM alpine:3.16 as dag_build
RUN apk add g++ make protobuf protobuf-dev grpc-dev \
pkgconfig git gsl-dev tclap-dev
RUN mkdir -p /usr/src/dag_service
WORKDIR /usr/src/dag_service
COPY model_services/protos/dag.proto /usr/src/protos/dag.proto
COPY model_services/dag/*.H /usr/src/dag_service/
COPY model_services/dag/dag_service.cc /usr/src/dag_service
COPY model_services/dag/Makefile /usr/src/dag_service
RUN cd /usr/src/dag_service; make dag_service
COPY model_services/dag/nfl_graph_q[1234]_130.txt.bz2 /usr/src/dag_service/
RUN cd /usr/src/dag_service; bunzip2 nfl_graph_q[1234]_130.txt.bz2
COPY model_services/dag/q[1234].Tree /usr/src/dag_service/
##################################################
# Run the dag service
FROM alpine:3.16 AS dag_runtime
RUN apk add protobuf-dev grpc-dev
COPY --from=dag_build /usr/src/dag_service/nfl_graph_q[1234]_130.txt /bin/
COPY --from=dag_build /usr/src/dag_service/q[1234].Tree /bin/
COPY --from=dag_build /usr/src/dag_service/dag_service /bin/dag_service
WORKDIR /bin/
RUN mkdir -p /tmp
EXPOSE 6003
RUN chmod a+x dag_service
CMD ["./dag_service", "-s", "1 0 900 75 -1 3 3", "-s", "2 0 900 75 -1 3 3", "-s", "3 0 900 75 -1 3 3", "-s", "4 0 900 75 -1 3 3", "-d", "nfl_graph_q1_130.txt", "-d", "nfl_graph_q2_130.txt", "-d", "nfl_graph_q3_130.txt", "-d", "nfl_graph_q4_130.txt", "-p", "q1.Tree", "-p", "q2.Tree", "-p", "q3.Tree", "-p", "q4.Tree", "-m", "3e-8", "-l", "0.99"]
该服务是用 C++ 编写的。
我的笔记本电脑运行 Linux,Ubuntu 22.04
【问题讨论】:
-
你在什么平台上使用 Docker?您是否在使用虚拟机实现的平台上使用它?例如。操作系统,视窗。
-
谢谢你的关注。我正在使用 Linux,具体来说是 Ubuntu 22.04。我在帖子中没有提到的一件事,问题也出在运行 K8S 的 AWS 中
-
这是自我管理的 kubernetes,还是 ECS,还是别的? Docker 版本的运行方式与非 Docker 版本的运行方式有何不同?
-
我们使用ECS。独立服务就像命令行一样运行,类似于 shell 中的
/dag_service -s "1 0 900 75 -1 3 3" -s "2 0 900 75 -1 3 3" -s "3 0 900 75 -1 3 3" -s "4 0 900 75 -1 3 3" -d nfl_graph_q1_130.txt -d nfl_graph_q2_130.txt -d nfl_graph_q3_130.txt -d nfl_graph_q4_130.txt -p q1.Tree -p q2.Tree -p q3.Tree -p q4.Tree -m 3e-8 -l 0.99
标签: docker