H-K-Y / Genshin_Impact_bot

原神bot,这是一个基于nonebot和HoshinoBot的原神娱乐及信息查询插件,包含原神抽卡,丘丘语翻译,找资源点等功能
GNU General Public License v3.0
389 stars 85 forks source link

命令-刷新原神地图,导致Hoshino崩溃 #52

Open xulai1001 opened 2 years ago

xulai1001 commented 2 years ago

调用命令 刷新原神地图时,报错 Image size (XXX pixels) exceeds limit of 178956970 pixels, could be decompression 加上Image.MAX_IMAGE_PIXELS = None之后,hoshino直接崩溃 推测是新版原神地图过大?

hoshino-env_1 | [2021-09-25 22:09:35,605 nonebot] INFO: Self: 330071, Message 1133240255 from 18673@[群:284****59]: '更新原神地图' hoshino-env_1 | [2021-09-25 22:09:35,606 原神资源查询] INFO: Message 1133240255 triggered up_map_icon by PrefixTrigger. hoshinobot_hoshino-env_1 exited with code 137

H-K-Y commented 2 years ago

git pull到最新的版本

xulai1001 commented 2 years ago

已经pull了。可能是服务器内存不够……?

H-K-Y commented 2 years ago

服务器什么配置的,1G内存的估计跑不动

xulai1001 commented 2 years ago

确实内存太小……(没想到确实是内存问题 在自己电脑上重新生成了一遍地图(最终尺寸6MB)传到服务器上,跳过生成步骤,问题解决。可以close了。 我如果不再调用“刷新原神地图”命令,他应该不会自己去再次尝试生成吧? 辛苦dalao了!

H-K-Y commented 2 years ago

不是的,为了减小贴图的计算量,每次更新资源点列表都会重新下载地图裁切没用的边缘数据保存, 建议还是把服务器升级到2G内存吧

H-K-Y commented 2 years ago

而且你用的是最新的版本吗,最新版本地图裁切玩应该是不到3MB的

xulai1001 commented 2 years ago

服务器是2G内存的 感觉还是哪里不对劲。又用top看了一下。 平时没有内存开销,运行这个命令时 内存消耗会瞬间到达1G然后被kill掉…… 本地生成地图是刚clone的最新版本

H-K-Y commented 2 years ago

原始图像读进来会先裁切一次然后后续的地图生成用的是裁切后的图像,原始图像读进来确实得1G内存占用,裁切后占用内存大概是200多MB,所以就常驻内存了 你不会自己改过代码逻辑吧,实在不行你把插件删了重新安装一下

xulai1001 commented 2 years ago

没改过代码逻辑…… map_icon up_map生成的大地图文件,尺寸为16384x16384 但是有内容的范围只有约9000x9000

H-K-Y commented 2 years ago

这个文件现在不会生成了啊,你用的真的是最新版吗..............

xulai1001 commented 2 years ago

新版代码里把保存这个文件的步骤注释掉了。我把它取消了存下来看了一下…… 我再想想是哪一步内存不够。可能在处理比这个大图小的部分时就不够了……

xulai1001 commented 2 years ago

好吧现在彻底改坏了。 新版代码每次启动的时候都会抓16k的原图下来裁切。这时候就直接内存炸了 hoshino都无法启动了 反而是用map_icon.jpg的老版本起码能够正常启动……

我明天再试试吧。

H-K-Y commented 2 years ago

因为新版本的资源列表要和裁切后的地图匹配,所以每次更新都得重下地图, 是日志打出正在更新地图就炸了吗

xulai1001 commented 2 years ago

是的

xulai1001 commented 2 years ago

pillow确定是爆炸了……尝试了一下pyvips,生成裁切后的大地图只花了192MB内存 等会再试试贴图 他并没有直接支持alpha贴图……喷血

xulai1001 commented 2 years ago

换了一个思路。直接预处理所有图片,查询时返回图片即可。 pyvips也暂时用不上了

56

eldridgec commented 2 years ago

大佬,我也是1G小服务器,直接首次启动加载地图的时候就被KILL了

eldridgec commented 2 years ago

请问nonebot2版的可以单独把地图功能关闭吗,或者有其他解决方案