39 Star 111 Fork 22

方舟编译器孵化器 / maple_engine

 / 详情

被需要24g内存吓到了

待办的
创建于  
2020-07-22 03:15

为啥这么吃内存
第一次在Linux下见到如此高内存的需求

评论 (16)

已注销用户 创建了任务
展开全部操作日志

编译和链接 OpenJDK 核心库时,会占用很多内存,大约需要16GB多一点。加上系统其它进程及文件系统缓存占用的部分,建议用24GB内存服务器。

若您的服务器只有16GB内存,可以创建8GB或以上的swap空间,运行时间要长一些。

OpenJDK-8 核心库的Java源程序行数是百万数量级的,Maple编译器将其链接为一个.so共享库,方便大家使用。编译和链接一个的应用程序,所需内存取决于这个应用程序的大小,一般不会用这么多内存。

一开始我以为是中文文档翻译错了,把ROM翻译成RAM,看了下英文文档真的是RAM :new_moon_with_face:

一开始我以为是中文文档翻译错了,把ROM翻译成RAM,看了下英文文档真的是RAM :new_moon_with_face:

@晓得咯 多谢!翻译得很好。“build”翻译成构建我也是刚学的 :smile:

编译和链接 OpenJDK 核心库时,会占用很多内存,大约需要16GB多一点。加上系统其它进程及文件系统缓存占用的部分,建议用24GB内存服务器。
若您的服务器只有16GB内存,可以创建8GB或以上的swap空间,运行时间要长一些。
OpenJDK-8 核心库的Java源程序行数是百万数量级的,Maple编译器将其链接为一个.so共享库,方便大家使用。编译和链接一个的应用程序,所需内存取决于这个应用程序的大小,一般不会用这么多内存。

对于更少内存的服务器,可以考虑在其它内存较多的服务器上先构建好libcore.so, 将maple_engine/maple_build/out/这个目录打包传到您的本地机器,展开后放到本地机器同名目录下,再拷贝其中的文件libcore.so 到maple_engine/maple_runtime/lib/x86_64/libcore.so,就可以本地编译和运行应用程序了。

服务器的内存需求已更新为最少16GB,参见链接

@晓得咯 多谢!翻译得很好。“build”翻译成构建我也是刚学的 :smile:

@Maple_YZhang :full_moon_with_face: 很惭愧,做了一些微小的工作,只能抛个砖引些玉了

能优化下编译java代码时的内存占用么, 现在编译hello world要4G内存才能编译成功。

能优化下编译java代码时的内存占用么, 现在编译hello world要4G内存才能编译成功。

@东方星痕
不会是新精简化的原因吧?您是如何进行精简的呢?
我用您之前给出的镜像进行精简后,似乎没有碰到这个情况,因为我的虚拟机只有2G……
而目前这几次提交看起来不过是改了改文档以及复制一下库而已?

能优化下编译java代码时的内存占用么, 现在编译hello world要4G内存才能编译成功。

@东方星痕 抓了编译HelloWorld时的RSS内存占用,峰值达到了约1.69GB。载入全部核心库符号导致内存占用过多,值得优化,尤其在编译较小的应用程序时。

@Maple_YZhang @wconly
编译过程, 这是云服务器,其他人的云服务器也是这样。

精简过程见dockerfile: https://ystyle.top/2020/07/21/dokcer-compile-maple-engine/

@Maple_YZhang @wconly
编译过程, 这是云服务器,其他人的云服务器也是这样。

@东方星痕
好的,刚才也看到了上面社区的回复~

@东方星痕
好的,刚才也看到了上面社区的回复~

@wconly @东方星痕 创建了一个虚拟机,安装了Ubuntu 16.04(服务器版 https://releases.ubuntu.com/16.04/ubuntu-16.04.6-server-amd64.iso ),测量了能够成功编译HelloWorld的最小内存使用情况,结果如下:
输入图片说明
从上图可以看到,系统占用内存约有43MB,总内存为1799MB,swap空间设置为0,编译和运行HelloWorld成功。供参考。

@Maple_YZhang @东方星痕
冒昧的问一句,二位的观察方法是不是有点儿问题?
我看二位都是在编译后才执行的free,这时得到的貌似是编译后的内存使用情况吧?
我又细看了一下,在编译过程中,从宿主机的管理器去看,内存占用不大,反而硬盘100%,从虚拟机的角度去看,就是编译期间卡住,编译后才能动惹……

@Maple_YZhang @东方星痕
冒昧的问一句,二位的观察方法是不是有点儿问题?
我看二位都是在编译后才执行的free,这时得到的貌似是编译后的内存使用情况吧?
我又细看了一下,在编译过程中,从宿主机的管理器去看,内存占用不大,反而硬盘100%,从虚拟机的角度去看,就是编译期间卡住,编译后才能动惹……

@wconly 执行后free只是看内存大小,有没有swap, 和主机本身的内存占用。。。
编译进程占用我是通过htop看到的,虽然没截图。。。。
有几个朋友也是用的云机器,内存都2G以下编译不出来, 所以来问问。。。

@wconly 执行后free只是看内存大小,有没有swap, 和主机本身的内存占用。。。
编译进程占用我是通过htop看到的,虽然没截图。。。。
有几个朋友也是用的云机器,内存都2G以下编译不出来, 所以来问问。。。

@wconly 最后的free命令只查看主机内存情况,正如@东方星痕 所解释的。 我用的主机系统占用内存约有43MB,而上面@东方星痕 提到的主机系统占用内存约有314MB, 这个差异造成了“2G以下编译不出来”这个问题。

@Maple_YZhang @东方星痕
好的,打扰二位惹。这样算内存差的还不是太多,应急的话临时用硬盘当内存应该就可以了吧……

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(5)
58234 ystyle 1578915778 5282271 wconly 1596507560 Avatar default
C++
1
https://gitee.com/openarkcompiler-incubator/maple_engine.git
git@gitee.com:openarkcompiler-incubator/maple_engine.git
openarkcompiler-incubator
maple_engine
maple_engine

搜索帮助