如何以较低的内存占用运行mirai
-
在使用 hotspot 作为 jvm 的 java 的时候,即使在刚开始运行的时候,也会占用约240Mb的内存。将其换成 openj9,虽然说降低了 30% 的内存,但也还是占用了差不多 168Mb 的内存
所以想在这里跟大家询问一下,有什么办法能够以较低的内存占用运行mirai -
使用32位jre
-
@RainChan
试了一下,发现32位的hotspot内存占用甚至比64位的openj9还要高
(32位hotspot: 177Mb, 64位openj9: 163Mb)
(因为32位openj9不知道哪里找所以没测) -
你可能需要对JVM下手。搞不好得干掉JVM。我之前试过用GraalVM来编译我的Mirai Core项目(编译成二进制可执行文件),但试验了几天发现它不支持Mirai。
以下全为我个人猜想↓↓↓
如果能使用GraalVM编译Mirai且机器人成功登录后,内存(不是硬盘占用,而是RAM占用)占用50MB左右(理想环境:Mac OS 10.14.6 + SpringBoot 2.6.4 + mirai core 2.6.7 + spring-native 0.11.3) -
刚刚发现更离谱的
openj9 64位 的 java 在运行一段时间后内存直接下降到131Mb(要是内存不够可能继续往下降
hotspot 32位 的 java 则会只下降到 168Mb,维持稳定 -
挖一下自己的坟,2.13之后,mirai可以直接 kotlin/native 了。不知道直接编译的话会不会对内存占用有所改观。
(注:鄙人不会怎么用 kotlin/native,所以不太清楚) -
@I-love-study 我去年的猜想正确 ,要想mirai运行时降低内存占用就得干掉JVM(Hotspot),方式有两种:
1:可以换VM编译
2:移植mirai协议至其他语言
我采用的是方式1,成功地用GraalVM编译mirai-core项目(用的是OpenJDK 19,Ubuntu 20.04 Docker镜像,mirai-core 2.13.3),机器人登录成功后内存仅占用60MB
同一套代码打成JAR包方式运行成功后则需要160MB的内存
但方式2可以做到把内存压到30MB以内,比如:mirai-go