cPanel启动Node.js应用报WebAssembly内存溢出错误如何解决?
错误原因
你遇到的RangeError: WebAssembly.instantiate(): Out of memory: wasm memory错误是cPanel常用的CloudLinux LVE资源限制机制导致的:Node.js 14.x内置的CJS模块词法解析器使用WebAssembly实现,初始化时需要申请连续的内存块,而cPanel默认给单进程的内存配额不足以满足这个Wasm实例的内存需求,本地开发环境没有资源限制所以可以正常运行。
可执行解决方案
- 调整启动命令增加Node.js内存上限
将你package.json里的start脚本从node server.js修改为:
256的单位为MB,你可以根据cPanel账户分配的内存配额调整数值,不要超过LVE分配的总内存上限即可。node --max-old-space-size=256 server.js - 升级Node.js版本
你当前使用的Node.js 14.17.3存在已知的cjs-module-lexer Wasm内存分配缺陷,你可以在cPanel的Node.js版本选择器中升级到14.18.0及以上的14.x小版本,或是更高的LTS版本(16.x、18.x),大部分场景下升级版本即可直接解决该问题。 - 禁用Wasm版模块解析器
如果暂时无法升级Node.js版本,可以在启动参数中关闭实验性的Wasm解析优化,将启动命令修改为:
该方案会改用纯JS实现的模块解析器,性能略有下降但可以规避Wasm内存不足的问题。node --no-experimental-specifier-resolution=node server.js - 提升cPanel内存配额
如果上述方案都无效,可以进入cPanel的资源使用页面查看当前账户的内存配额,若配额低于128MB,请联系你的主机服务商提升内存配额,普通Node.js应用至少需要256MB可用内存才能正常启动。
内容的提问来源于stack exchange,提问作者Aman Chaudhary
相关产品推荐
相关产品推荐

