Lua 脚本抛出 "not enough memory" 错误

Lua script is throwing "not enough memory" error

在我们的项目中,我们将 Lua 作为 Windows 服务中的 dll(X64 Windows 服务器上的 32 位进程)和 运行 脚本并行加载不同的线程。大多数时候一切正常,但是,在脚本执行内存密集型任务(例如加载大文件并在执行其他处理时迭代它)的情况下,脚本会抛出“内存不足”错误。 根据我对 Windows OS 内存模型的理解,如果抛出“内存不足”错误,那是因为进程已超过其内存配额(2 GB 或者大内存感知链接器选项设置为 4GB),因为 Windows 中没有线程特定的内存配额。但是有几点我无法理解:

  1. 如果有多个线程 运行 Lua 脚本并且所有线程都共享进程的相同地址 space 那么为什么“内存不足”只出现在线程上正在执行繁重的内存操作,它也可能出现在任何其他脚本上,但实际上并没有发生?
  2. 此问题是否与用于与 C 代码交互的 lua 堆栈有关?
  3. 是否存在 lua 维护的任何内部内存限制(顺便说一句,我找不到任何关于此的参考资料)。

关于我们的环境的几点:

  1. 它是旧产品,使用 Lua 5.1
  2. 没有自定义分配函数所以代码使用realloc进行内存分配

任何关于为什么会发生这种情况的指示都会有所帮助。 提前致谢!

以防万一其他人遇到这个问题:lua 本身没有内存限制,问题的发生是因为进程的地址 space 由于我们正在加载巨大的地图而被完全填满在记忆中。我们通过将内存数据移动到磁盘(本地数据库)来修复它。