在使用本机映像编译 gRPC 代码之前我应该采取哪些步骤?

问题描述 投票:0回答:2

我正在开发一个使用 gRPC 的项目,我想使用 GraalVM 的本机映像对其进行编译,以获得更好的性能和更小的内存占用。

我尝试过直接使用native-image,但是类初始化存在很多问题。我了解,在使用本机映像成功编译 gRPC 代码之前,我可能需要采取一些特定的配置或步骤。

以下是我正在寻求指导的一些特定领域:

  1. 是否有任何特定的 gRPC 功能或 API 与本机映像不兼容?
  2. 我是否需要为native-image提供任何额外的配置文件(如反射配置)(另外,我使用了shaded插件来更改grpc包的位置。这可能会对配置产生影响吗?)
  3. 将 gRPC 与本机映像结合使用时,是否有任何我应该注意的已知问题或限制?
  4. 有什么最佳实践或技巧吗?

有哪些相关资源?

java grpc netty graalvm-native-image
2个回答
0
投票

是的,阴影可能会导致本机图像出现很多损坏。

native-image 不是 gRPC 定期测试的东西。但它“以前对某人有用过”。我可以相信偶尔会出现回归,但我不认为会出现很多问题。

gRPC 及其一些依赖项包括 JAR 中的本机映像配置。如果您重新定位类文件而不重写配置,该信息就会被破坏。 grpc-netty-shaded 为 Netty 着色,因此 gRPC 有自定义代码来重写本机图像配置。因此,如果您进行阴影处理,我预计这会引起问题。


0
投票

与 gRPC 没有直接关系,但我堆叠在 protobuf 生成的类/jar 上。

请参阅原型构建器类上的以下异常,方法在那里,尚未找到任何解决方法。

Caused by: java.lang.NoSuchMethodException

Spring Boot 3.1.3
graalvm-jdk-17.0.8+9.1
本机-maven-插件 0.9.5

© www.soinside.com 2019 - 2024. All rights reserved.