如何为Quarkus应用生成PGO优化的原生可执行文件?
生成Quarkus应用的PGO优化原生镜像
我成功给Quarkus REST API生成过PGO优化的原生镜像,结合你已有的GraalVM企业版环境,可以按照以下步骤操作:
步骤1:生成带PGO采样功能的原生镜像
先构建一个带有PGO插桩能力的镜像,用来收集运行时的profile数据。执行命令:
./mvnw package -Dnative -Dnative.image-build.args=--pgo-instrument
执行完成后,target目录会生成一个带采样能力的应用可执行文件(比如your-app-runner)。
步骤2:运行采样镜像并收集profile数据
启动这个带采样的应用,然后模拟真实业务请求覆盖核心路径——比如用curl调用所有REST接口,或者用压测工具模拟高并发场景,确保应用的关键代码路径都被执行到。
运行采样镜像的基础命令:
./target/your-app-runner
默认情况下,应用退出时会在当前目录生成default.iprof文件,这就是收集到的profile数据。你也可以指定输出路径:
./target/your-app-runner --pgo-sample-file=my-app-profile.iprof
步骤3:用profile数据构建优化后的原生镜像
最后用收集到的.iprof文件重新构建PGO优化的镜像:
./mvnw package -Dnative -Dnative.image-build.args=--pgo=my-app-profile.iprof
替换my-app-profile.iprof为你实际生成的profile文件名即可。
注意事项
- 必须使用GraalVM企业版,社区版不支持PGO功能
- 采样阶段一定要覆盖应用的主要业务场景,否则优化效果会大打折扣
- 如果需要合并多个采样数据,可以用逗号分隔多个
.iprof文件,比如--pgo=prof1.iprof,prof2.iprof - 多模块项目需要确保参数正确传递到原生镜像构建阶段
内容的提问来源于stack exchange,提问作者Paras
相关产品推荐
相关产品推荐

