为何skaffold build中的cargo build比docker build耗时久得多?
Skaffold构建Rust微服务耗时异常排查问题
我们基于Rust开发后端服务,在minikube环境中调试,采用单个Dockerfile构建整个工作区,通过不同的cargo run命令部署不同微服务。目前遇到构建耗时差异极大的问题:
构建耗时对比
- 直接执行
docker build时,cargo build步骤构建二进制文件约耗时3分钟:
=> [10/10] RUN cargo fetch --locked && cargo build --offline --frozen --timings --verbose 186.3s => exporting to image 134.2s
- 执行
skaffold build时,cargo build步骤构建二进制文件约耗时20分钟,额外耗时集中在链接阶段:在104秒后显示最后一条警告,之后直到构建完成耗时超18分钟,日志如下:
#14 104.5 = note: `#[warn(dead_code)]` on by default #14 104.5 #14 1192.5 warning: `xx` (bin "xx") generated 9 warnings (run `cargo fix --bin "xx"` to apply 7 suggestions) #14 1223.4 Timing report saved to /home/app/target/cargo-timings/cargo-timing-20240531T162451Z.html #14 1223.4 Finished `dev` profile [unoptimized + debuginfo] target(s) in 19m 52s #14 DONE 1256.5s
已尝试的优化措施
- 为排除网络影响,Dockerfile中先执行
cargo fetch拉取依赖,再执行cargo run --offline构建; - 在
skaffold.yaml中配置启用Buildkit:
build: local: useBuildkit: true concurrency: 0
- 在Cargo.toml的
dev编译配置中禁用LTO:
[profile.dev] lto = "off"
目前skaffold dev因构建耗时过长无法正常使用,请问可能的原因是什么?
内容的提问来源于stack exchange,提问作者kdopen
相关产品推荐
相关产品推荐

