Почему я не могу создать `WebAssembly.Memory` в браузерах? - PullRequest
0 голосов
/ 19 сентября 2018

Я наткнулся на странное поведение во всех браузерах, которые я пробовал:

  • Chromium 69.0.3497.92 (Официальная сборка) Arch Linux (64-битная версия)
  • Chrome69.0.3497.100 (Официальная сборка) (64-разрядная версия)
  • Firefox 62.0 (64-разрядная версия)

Когда я пытаюсь выделить память для WebAssembly путем создания экземпляра объекта WebAssembly.Memory,например, вот так:

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

1 Ответ

0 голосов
/ 20 сентября 2018

Звучит как ограничение, установленное в вашей ОС.В 64-разрядных системах браузеры резервируют 6 ГБ виртуальной памяти на каждый объект памяти wasm (во избежание проверки границ в машинном коде).Если ваша максимальная память ограничена, у вас могут возникнуть проблемы с этим.Вывод ulimit показывает, что вы ограничены 8 ГБ виртуального адресного пространства на процесс, что, вероятно, объясняет это.

Возможно, попробуйте запустить ulimit -v unlimited, чтобы посмотреть, улучшит ли это ситуацию?

...