NodeJS и увеличение размера кучи - PullRequest
0 голосов
/ 18 апреля 2020
  1. Я хотел бы убедиться, что доступный размер кучи (которым может пользоваться мое приложение NodeJS) всегда был установлен на максимум.

  2. На мой понимание того, что больше не нужно устанавливать «--max_old_space_size» при запуске NodeJS 10 и выше ...?

Независимо от того, где я запускаю приложение моего узла - и я проверяю размер кучи это между 35 МБ - 40 МБ. Мой ноутбук имеет 32 ГБ памяти, а мой маленький экземпляр AWS имеет 1 ГБ - но оба, похоже, выделяют и используют один и тот же маленький размер кучи (old_space 37 МБ / 37072896 (1 ГБ) и 35 МБ / 35270656 (из 32 ГБ))?

Я пытался использовать и установить "--max_old_space_size = 1000000" - но, похоже, это не имеет никакого эффекта?

const v8 = require('v8');
console.log(v8.getHeapSpaceStatistics());

1. AWS INSTANCE WITH 1GB MEMORY:

[
  {
    space_name: 'read_only_space',
    space_size: 262144,
    space_used_size: 32296,
    space_available_size: 229576,
    physical_space_size: 262144
  },
  {
    space_name: 'new_space',
    space_size: 8388608,
    space_used_size: 1995376,
    space_available_size: 2194576,
    physical_space_size: 8388608
  },
  {
    space_name: 'old_space',
    space_size: 37072896,
    space_used_size: 35261192,
    space_available_size: 1746800,
    physical_space_size: 37072896
  },
  {
    space_name: 'code_space',
    space_size: 425984,
    space_used_size: 296192,
    space_available_size: 70048,
    physical_space_size: 425984
  },
  {
    space_name: 'map_space',
    space_size: 1576960,
    space_used_size: 1272080,
    space_available_size: 300656,
    physical_space_size: 1576960
  },
  {
    space_name: 'large_object_space',
    space_size: 1720320,
    space_used_size: 1700944,
    space_available_size: 0,
    physical_space_size: 1720320
  },
  {
    space_name: 'code_large_object_space',
    space_size: 49152,
    space_used_size: 3552,
    space_available_size: 0,
    physical_space_size: 49152
  },
  {
    space_name: 'new_large_object_space',
    space_size: 0,
    space_used_size: 0,
    space_available_size: 4189952,
    physical_space_size: 0
  }
]

2.Мой ноутбук с памятью 32 ГБ:

[
  {
    space_name: 'read_only_space',
    space_size: 262144,
    space_used_size: 33040,
    space_available_size: 0,
    physical_space_size: 262144
  },
  {
    space_name: 'new_space',
    space_size: 33554432,
    space_used_size: 16417832,
    space_available_size: 340952,
    physical_space_size: 33554432
  },
  {
    space_name: 'old_space',
    space_size: 35270656,
    space_used_size: 35127408,
    space_available_size: 50416,
    physical_space_size: 35270656
  },
  {
    space_name: 'code_space',
    space_size: 692224,
    space_used_size: 451296,
    space_available_size: 14304,
    physical_space_size: 692224
  },
  {
    space_name: 'map_space',
    space_size: 1839104,
    space_used_size: 1817840,
    space_available_size: 0,
    physical_space_size: 1839104
  },
  {
    space_name: 'large_object_space',
    space_size: 3067904,
    space_used_size: 3045496,
    space_available_size: 0,
    physical_space_size: 3067904
  },
  {
    space_name: 'code_large_object_space',
    space_size: 49152,
    space_used_size: 2784,
    space_available_size: 0,
    physical_space_size: 49152
  },
  {
    space_name: 'new_large_object_space',
    space_size: 1523712,
    space_used_size: 1515104,
    space_available_size: 15243680,
    physical_space_size: 1523712
  }
]

1 Ответ

0 голосов
/ 21 апреля 2020

Мой опыт:

Я понял, что Node фактически увеличивает размер кучи автоматически (и что он на самом деле работает так, как ожидалось). Так что, если размер кучи не заполняет всю вашу память - у вас все хорошо.

Я также понял, что у меня произошла утечка памяти (мое приложение-узел открывает путь ко многим соединениям через веб-сокеты - вместо сброса существующего). ). Я обнаружил это, запустив приложение Node через PM2 - оно имеет встроенный счетчик «активных обработчиков», который только увеличивается и увеличивается.

...