Lua脚本抛出“内存不足”错误

在我们的项目中,我们将Lua作为Windows服务中的dll加载(在X64 Windows服务器上运行的32位进程)并在不同的线程上并行运行脚本。大部分时间都很好,但在脚本执行耗费大量内存的任务时(如加载大文件并在处理其他任务时迭代它),脚本会抛出“内存不足”错误。 根据我对Windows操作系统内存模型的理解,如果抛出“内存不足”错误,那么是因为进程已经超过了其内存配额(2GB或者如果设置了大内存感知链接器选项,就是4GB),因为在Windows中不存在特定于线程的内存配额。但是,有几点我不理解:

1.如果有多个线程运行Lua脚本,并且所有线程都共享进程的同一地址空间,那么为什么“内存不足”仅出现在执行高内存操作的线程上,它也可能出现在其他脚本上,但实际上并没有发生? 2.这个问题是否与用于与c代码交互的lua堆栈有关? 3.lua是否有任何内部内存限制(我在文档中找不到任何参考)。

关于我们的环境的几个要点:

1.这是一个遗留产品,使用Lua 5.1 2.没有自定义分配函数,所以代码使用realloc进行内存分配。

任何关于此问题原因的提示都将有所帮助。谢谢!

点赞
用户3164323
用户3164323

如果其他人也遇到了这个问题:Lua 本身没有内存限制,问题是因为正在加载大量地图到内存中,导致进程的地址空间被完全填满。我们通过将内存中数据移到磁盘 (local db) 中来解决了这个问题。

2021-07-02 05:36:08