有人使用 GraalVM 编译 SpringBoot 程序了吗?

2023-04-30 09:54:10 +08:00
 ThinkStu
OP 从去年开始关注 GraalVM 的发展,前天开始想把我之前写的一些小应用转为可执行的二进制文件,原因当然是服务器的内存不够用。

实测在 MacOS 系统上普通 SpringBoot 程序大约占用内存 200MB ,转为可执行文件后内存占用大约 30MB 。

现在最大的问题是,GraalVM + image-native 这一套东西不支持跨端编译!也就是在 Mac 系统上编译出来的程序无法再 Linux 上直接运行。op 曾考虑过将代码转移到 Linux 服务器上进行编译,结果因为许多依赖问题,一直报错,前前后后折腾了两三天也没能想到好方法。🥲
4692 次点击
所在节点    Java
34 条回复
Akitora
2023-04-30 10:17:46 +08:00
oldshensheep
2023-04-30 10:24:28 +08:00
用 GitHub Action 编译。我这个简单的 Web 程序就是用 GitHub action 编译的,可以参考一下。编译了三端 Linux ,Mac ,Windows ,https://github.com/oldshensheep/place

或者把报错贴出来,我也不知道你说的依赖问题是什么。
ljhrot
2023-04-30 10:24:51 +08:00
graalvm 编译占用太多内存这个问题一直存在,加上不支持交叉编译,所以我在多余的硬盘上装了 Linux 用来编译,相当于得配一套跟部署环境一致的机器专门来编译

Linux 安装 graalvm 应该还好吧,你直接把报错信息发出来让大伙瞧瞧

我之前是想在一个新项目尝尝鲜,结果第三方依赖的静态资源太多,搞不动就放弃了,感觉生态还有很长的路要走
gakaki
2023-04-30 10:33:11 +08:00
https://github.com/gakaki/spring_template 我写了一个也是 github action 的
gakaki
2023-04-30 10:35:29 +08:00
基于 docker 编译 注意编译一次要 3 到 5 分钟要 github action 自己本机还算了吧 这题最麻烦的还是 se 运维, 遇到麻烦的 se 可能给你打回不让你用, 还必须用 jdk17 以上
ThinkStu
2023-04-30 10:46:12 +08:00
@oldshensheep @ljhrot
目前的错误信息是这个:
Linux 虚拟机上的 GraalVM 环境是是问题的,见:
julyclyde
2023-04-30 11:18:33 +08:00
那个 /root/.jdks/graalvm-ce-17/bin/java 文件存在吗?能运行吗?
oldshensheep
2023-04-30 11:39:01 +08:00
maven 添加个-X 参数,看看 full debug logging
ThinkStu
364 天前
@oldshensheep #8 下面是打印出来的结果:
ThinkStu
364 天前
@julyclyde #7 这个命令也是完全没有问题的
ThinkStu
364 天前
源码其实就是一个很小的测试案例,已经上传至 GitHub: https://github.com/Bistutu/hello_graalvm
swhhaa
364 天前
GraalVM 自己玩还行,不知道有没有用于生产环境的...
lff0305
364 天前
试试在 graal home 的 bin 里运行
./gu list
看看有没有装好了 native image
ThinkStu
364 天前
@lff0305 #13 安装好了的,问题还是一样
oldshensheep
364 天前
你的代码我用 Linux 编译了可以正常编译运行( ARM ,Ubuntu )

Failed to spawn exec helper
有没有试过下面的方法,Google 的

chmod +x $JAVA_HOME/lib/jspawnhelper
ljhrot
364 天前
https://imgur.com/a/I6idY2W

你的项目可以正常编译,你的环境能不能 native-image 编译个 Hello World ?
ThinkStu
364 天前
@oldshensheep #15 我切换到 arm 架构的虚拟机,也能正常编译了,不过为什么 Intel 还是没有成功,暂时不知道原因
ThinkStu
364 天前
@ljhrot #16 想问一下,你这台机子是 arm 还是 intel 的?
ljhrot
364 天前
@ThinkStu #18 amdx64 [DOGE]
ThinkStu
364 天前
感谢大家的帮助!此贴终结🙆。经过测试,原因已经找到:可能是因为利用 orbStack 创建出来的 Intel 虚拟机存在问题,导致一直无法正常编译(因为我是 MacOS 系统,M1 pro 芯片 )。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/936538

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX