Lua 脚本抛出 "not enough memory" 错误
Lua script is throwing "not enough memory" error
在我们的项目中,我们将 Lua 作为 Windows 服务中的 dll(X64 Windows 服务器上的 32 位进程)和 运行 脚本并行加载不同的线程。大多数时候一切正常,但是,在脚本执行内存密集型任务(例如加载大文件并在执行其他处理时迭代它)的情况下,脚本会抛出“内存不足”错误。
根据我对 Windows OS 内存模型的理解,如果抛出“内存不足”错误,那是因为进程已超过其内存配额(2 GB 或者大内存感知链接器选项设置为 4GB),因为 Windows 中没有线程特定的内存配额。但是有几点我无法理解:
- 如果有多个线程 运行 Lua 脚本并且所有线程都共享进程的相同地址 space 那么为什么“内存不足”只出现在线程上正在执行繁重的内存操作,它也可能出现在任何其他脚本上,但实际上并没有发生?
- 此问题是否与用于与 C 代码交互的 lua 堆栈有关?
- 是否存在 lua 维护的任何内部内存限制(顺便说一句,我找不到任何关于此的参考资料)。
关于我们的环境的几点:
- 它是旧产品,使用 Lua 5.1
- 没有自定义分配函数所以代码使用realloc进行内存分配
任何关于为什么会发生这种情况的指示都会有所帮助。
提前致谢!
以防万一其他人遇到这个问题:lua 本身没有内存限制,问题的发生是因为进程的地址 space 由于我们正在加载巨大的地图而被完全填满在记忆中。我们通过将内存数据移动到磁盘(本地数据库)来修复它。
在我们的项目中,我们将 Lua 作为 Windows 服务中的 dll(X64 Windows 服务器上的 32 位进程)和 运行 脚本并行加载不同的线程。大多数时候一切正常,但是,在脚本执行内存密集型任务(例如加载大文件并在执行其他处理时迭代它)的情况下,脚本会抛出“内存不足”错误。 根据我对 Windows OS 内存模型的理解,如果抛出“内存不足”错误,那是因为进程已超过其内存配额(2 GB 或者大内存感知链接器选项设置为 4GB),因为 Windows 中没有线程特定的内存配额。但是有几点我无法理解:
- 如果有多个线程 运行 Lua 脚本并且所有线程都共享进程的相同地址 space 那么为什么“内存不足”只出现在线程上正在执行繁重的内存操作,它也可能出现在任何其他脚本上,但实际上并没有发生?
- 此问题是否与用于与 C 代码交互的 lua 堆栈有关?
- 是否存在 lua 维护的任何内部内存限制(顺便说一句,我找不到任何关于此的参考资料)。
关于我们的环境的几点:
- 它是旧产品,使用 Lua 5.1
- 没有自定义分配函数所以代码使用realloc进行内存分配
任何关于为什么会发生这种情况的指示都会有所帮助。 提前致谢!
以防万一其他人遇到这个问题:lua 本身没有内存限制,问题的发生是因为进程的地址 space 由于我们正在加载巨大的地图而被完全填满在记忆中。我们通过将内存数据移动到磁盘(本地数据库)来修复它。