Может ли процесс Nodejs использовать больше памяти, чем доступно физической памяти (с помощью подкачки памяти)?

Я использую Nodejs. Я планирую увеличить лимит памяти приложения Nodejs.

В процессе поиска я нашел эту статью: Увеличение пределов памяти Node.js.

Автор говорит, что его сервер имеет только 8GB физической памяти, но его процесс Nodejs использует 28GB памяти. Я предполагаю, что он использует physical + swap объем памяти. В статье также упоминается, что разработчик известного фреймворка Nodejs использует 15GB ограничение памяти для его нодей.

Я попытался найти некоторые примеры из других языков программирования. В Java кажется, что не рекомендуется использовать подкачку памяти для кучи JVM. Обращаясь к этой статье: Как увеличение размера подкачки позволяет мне увеличить размер кучи? Использование подкачки памяти для кучи JVM создаст большие проблемы.

Я не уверен, есть ли какая-либо разница между GC JVM и GC Nodejs.

Может ли процесс Nodejs использовать больше памяти, чем доступно физической памяти (с помощью подкачки памяти)?

1 ответ

Решение

Может ли процесс Nodejs использовать больше памяти, чем доступная физическая память (используя память подкачки)?

Да, оно может. Как и любой другой процесс. Управляется ОС. Процесс запрашивает новую страницу, и он даже не знает, поменяна ли она или нет.

Я бы не рекомендовал его, так как это может привести к снижению производительности. Диски (даже SSD) на несколько порядков медленнее, чем RAM. Лично мне не нравится вообще использовать какую-либо память подкачки в моих системах именно по этой причине. К сожалению, в Linux это означает, что я не могу перейти на диск, но я могу жить с этим.

То, что вы на самом деле видите, когда проверяете использование памяти, не всегда так очевидно. Некоторые разделяемые библиотеки могут быть сопоставлены нескольким процессам одновременно, и использование, которое вы видите, не всегда реально. Также процесс может запросить много памяти, но это не значит, что он его получает. Реальная физическая память (ОЗУ или подкачка) может отображаться при первом доступе к данной странице, а не при ее запросе. Это сделано с ошибками страницы.

Для получения дополнительной информации см.:

Другие вопросы по тегам