Подтвердить что ты не робот

Каков максимальный размер буфера Node.js

Я получил фатальную ошибку при чтении файла, который был слишком большим, чтобы поместиться в буфер.

FATAL ERROR: v8::Object::SetIndexedPropertiesToExternalArrayData() length exceeds max acceptable value

Или же,

RangeError: аргумент "size" не должен быть больше 2147483647 в Function.Buffer.allocUnsafe(buffer.js: 209: 3)

Если я пытаюсь выделить 1 ГБ буфера, я получаю ту же фатальную ошибку,

var oneGigInBytes = 1073741824;
var my1GBuffer = new Buffer(oneGigInBytes); //Crash   

Каков максимальный размер экземпляра класса Node.js Buffer?

4b9b3361

Ответ 1

Максимальная длина типизированного массива в V8 в настоящее время установлена в kSmiMaxValue которая в зависимости от платформы:

  • 1 ГБ - 1 байт на 32-разрядном
  • 2 Гб - 1 байт на 64-битной

Соответствующей константой в коде является v8::internal::JSTypedArray::kMaxLength (source).

Команда V8 работает над увеличением этого еще больше на 64-битных платформах, где в настоящее время объекты ArrayBuffer могут иметь Number.MAX_SAFE_INTEGER до Number.MAX_SAFE_INTEGER (2 ** 53 - 1). Смотрите ошибку 4153.

Ответ 2

Теперь это задокументировано как часть api buffer узла, максимальный размер - buffer.constants.MAX_LENGTH.

buffer.constants.MAX_LENGTH <integer> Максимальный размер, допустимый для одного экземпляра Buffer.

  • В 32-разрядных архитектурах это значение равно (2^30)-1 (~ 1 ГБ).
  • В 64-разрядных архитектурах это значение равно (2^31)-1 (~ 2 ГБ).

Это значение также доступно как buffer.kMaxLength.

Таким образом, вы можете понять, насколько он велик,

> (require('buffer').constants.MAX_LENGTH + 1) / 2**30
2

Ответ 3

Кажется, что текущий максимальный размер буфера равен 2147483647 байт aka 2.147GB

Источник: fooobar.com/info/186236/... (и мой собственный код)