Chi*_*iru 13 javascript browser linux memory webassembly
我在我试过的所有浏览器中偶然发现了一些奇怪的行为:
当我尝试通过实例化WebAssembly.Memory对象来为WebAssembly分配内存时,例如:
new WebAssembly.Memory({ initial: 1 })
在Chrome/Chromium中,我得到:
VM274:1 Uncaught RangeError: WebAssembly.Memory(): could not allocate memory
    at <anonymous>:1:1
(anonymous) @ VM274:1
在Firefox中,我得到:
Error: out of memory 
Node.js中的分配工作正常,但出于某种原因,我的所有浏览器都失败了.我不知道该怎么做,所有依赖WebAssembly的网站都因此无法使用.
我怀疑Linux正在阻止浏览器(但不是node.js?)分配内存,但这只是一个疯狂的猜测.另一台计算机上几乎相同的安装工作正常,但在这台特定的机器上,浏览器的每次分配都会失败.
有谁知道发生了什么?
这是我的输出ulimit -a:
-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         unlimited
-m: resident set size (kbytes)      unlimited
-u: processes                       31215
-n: file descriptors                1024
-l: locked-in-memory size (kbytes)  16384
-v: address space (kbytes)          8388608
-x: file locks                      unlimited
-i: pending signals                 31215
-q: bytes in POSIX msg queues       819200
-e: max nice                        0
-r: max rt priority                 99
-N 15:                              unlimited
这听起来像是操作系统中设置的限制。在 64 位系统上,浏览器为每个 wasm 内存对象保留 6GB 虚拟内存(以避免机器代码中的边界检查)。如果您的最大内存有限,您可能会遇到问题。ulimit 的输出显示每个进程的虚拟地址空间限制为 8GB,这可能解释了这一点。
也许尝试跑步ulimit -v unlimited看看这是否会改善情况?
| 归档时间: | 
 | 
| 查看次数: | 1128 次 | 
| 最近记录: |