Каков максимальный размер буфера 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?
Ответы
Ответ 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/... (и мой собственный код)