GraalVM本机图像到AWS Graviton2(Arm64)处理器的迁移问题



现有实现:

  • 为x86_64体系结构配置的所有Lambda
  • 这些lambdas将运行GraalVM编译的本机映像以执行一些功能
  • 这个原生镜像的编译是使用原生Maven插件(0.9.9)&命令:mvn-B-DskipTests-Pnative clean package
  • 我们在构建步骤中将其作为Github操作的一部分

要将Lambdas移动到Graviton2实例:-

  • 我们根据本文将模板中的架构更改为"arm64"。这导致了此错误:'./native-executable: cannot execute binary file'

  • 为了让它在基于arm64的处理器上工作,我们尝试为aarm64重新编译这段java代码。以下是我做的几件事:-

    1. 使用DeLaGuardo/setup graalvm将Github上的graalvm设置更改为arm64基础,然后得到以下错误:cannot execute binary file: Exec format error Error: Process completed with exit code 126.
    2. 试用Graalvm软件包安装&安装本机映像,获取java11-aarch64/x64/bin/gu:无法执行binary file: Exec format error
    3. 尝试在arch包上运行,但它给了我'Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?'的错误
    4. 当我尝试创建一个没有Graalvm的构建时,也得到了'mvn command not found'

总之,"arm64"的简单架构值更改不足以在基于Graviton2的AWS Lambdas&Github-Java-Arm64堆栈上的许多迁移相关问题。

如果有人能帮助我摆脱这个瓶颈,我将不胜感激。

GraalVM支持arm64https://www.graalvm.org/22.0/reference-manual/native-image/ARM64/自21.0版起。

  1. 对于github操作,";amd64";至";臂64";不起作用,您还需要使用qemu模拟器
  2. 目前还不清楚你是如何设置github操作的,但你可以从这里获得一些参考https://docs.docker.com/ci-cd/github-actions/
  3. 从错误中可以看出mvn没有安装

对于aarch64,这里也有一些步骤https://www.graalvm.org/22.0/docs/getting-started/linux-aarch64/

从您发布的错误来看,docker进程可能没有足够的资源来编译本机可执行文件。

如果可能的话,我会仔细检查你的GitHub操作配置并添加更多内存。

如果您使用AWS运行时接口客户端作为解决方案的一部分,则需要2.1.1版本。这是第一个支持aarch64的版本。

<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-runtime-interface-client</artifactId>
<version>2.1.1</version>
</dependency>

相关内容

  • 没有找到相关文章

最新更新