Программа memory run что это

Содержание

Программы для проверки оперативной памяти

Причиной снижения скорости работы компьютера могут стать неполадки оперативной памяти. Чтобы проверить основные параметры ОЗУ — скорость чтения и записи информации разных размеров — необходимо использовать специальные утилиты для анализа.

MemTest

MemTest — небольшая утилита, которая используется для тестирования надежности оперативной памяти. Программа дает возможность оценить способность ОЗУ считывать и записывать информацию. При необходимости пользователи могут указать количество памяти в мегабайтах для тестирования. Чаще всего утилита используется во время разгона системы.

Приложение имеет полную совместимость с операционной системой Windows (32/64 бит), но не переведена на русский язык. Пользоваться программой MemTest можно бесплатно. При этом есть возможность покупки лицензионной версии с расширенным функционалом:

  1. Pro. Стоимость этой версии утилиты составляет 5 долларов. Дает возможность получать более подробные отчеты об ошибках. Можно установить функция для автоматического запуска тестирования памяти через командную строку.
  2. Deluxe. Цена Deluxe-версии — 14 долларов. Распространяется на специальном CD-накопителе. Включает в себя все функции Pro-версии. Доступна возможность запуска утилиты через BIOS.

Чтобы начать работу с программой MemTest, не нужно устанавливать утилиту — достаточно загрузить архив и запустить ярлык. Все основные инструменты для работы расположены в главном окне. На первом этапе пользователям нужно указать объем памяти для тестирования. По умолчанию стоит параметр «All unused RAM» — вся неиспользуемая память.

Как работает компьютерная память: что такое RAM, ROM, SSD, HDD и в чем разница?

MemTest

Пользователи могут указать любой доступный объем памяти в МБ. Чтобы начать процесс тестирования ОЗУ, необходимо нажать кнопку «Start Testing».

Запуск теста ОЗУ в MemTest

По завершению процесса работы утилита покажет найденное количество ошибок в нижней части интерфейса утилиты.

Проверка памяти в MemTest

Преимущества программы MemTest:

  • утилита полностью бесплатная;
  • простой интерфейс;
  • простой и удобный интерфейс.
  • минимальное количество инструментов для тестирования оперативной памяти.

MemTach

MemTach — небольшое приложение для тестирования оперативной памяти компьютера. Утилита выполняет коды различных процедур, чтобы определить скорость и время выполнения определенных задач памятью.

Программа полностью совместима с операционной системой Windows (32/64 бит), но не переведена на русский язык. Модель распространения программы MemTach — бесплатная.

Как проверить оперативную память: 2 способа. Программа Memtest86

После запуска утилиты откроется главное окно. Перед тем, как запустить анализ оперативной памяти, пользователи могут выполнить небольшие настройки процесса. В разделе «Advanced Options» можно установить расширенные параметры тестирования: включить полный анализ ОЗУ и длительный тест (дольше обычного анализа в 4 раза).

Также в программе есть возможность выбора интернет-браузера: Nescape или Internet Explorer. Он используется для просмотра результатов других пользователей на сайте утилиты. Также с помощью браузера можно загрузить свои результаты тестирования ОЗУ.

MemTach

Установленные параметры позволяют провести более подробную проверку оперативной памяти. Чтобы начать работу утилиты MemTach, надо нажать кнопку «Start Tests».

Запуск проверки ОЗУ в MemTach

Программа начнет подробный анализ ОЗУ. Результаты отобразятся в правой части интерфейса. Здесь расположена следующая информация: название теста, минимальная и максимальная скорость памяти в МБ/сек.

Сведения об ОЗУ в MemTach

Полученные результаты можно сохранить в отдельном текстовом файле. Для этого нужно перейти в раздел «File» и выбрать пункт «Save».

  • бесплатная модель распространения;
  • возможность проведения глубокого анализа оперативной памяти:
  • проверка максимальной и минимальной скорости ОЗУ при выполнении различных задач.
  • неудобный интерфейс без официальной поддержки русского языка.

SuperRam

SuperRam — утилита, которая используется для работы с операционной системой. С помощью приложения можно оптимизировать работу ОЗУ, проверить количество свободной и используемой памяти в режиме реального времени, провести тестирование. Есть инструмент для просмотра статистика анализа и истории отчетов.

Программа совместима с операционной системой Windows (32/64 бит), но интерфейс представлен на английском языке. Модель распространения приложения SuperRam — условно-бесплатная. Чтобы получить доступ ко всем имеющимся инструментам, необходимо купить полную версию. Стоимость лицензии составляет 19 долларов. Для тестирования основных возможностей ПО можно загрузить бесплатную пробную версию.

После запуска программы откроется главное окно. В первом разделе отображается подробная информация об оперативной памяти в режиме реального времени: количество свободной и используемой памяти, процент загруженности.

SuperRam

Также в главном окне расположены основные инструменты для работы с утилитой. Чтобы начать проверку оперативной памяти, необходимо выбрать функцию «Run memory benchmark test». После этого откроется новое окно, где пользователям показаны основные параметры, которые будут проанализированы. Чтобы начать работу, необходимо нажать кнопку «Start».

Запуск теста ОЗУ в SuperRam

Утилита начнет анализ каждого параметра из списка. Каждому пункту тестирования выставляется оценка от 0 до 10 в зависимости от текущего состояния. В строке «Calculating final score» суммируются все баллы и выставляется общая оценка состояния оперативной памяти.

Просмотр сведений об ОЗУ в SuperRam

  • простой и удобный интерфейса;
  • отслеживание текущего состояния оперативной памяти в режиме реального времени;
  • возможность просмотра истории всех отчетов.
  • нет официальной поддержки русского языка.

RightMark Memory Analyzer

RightMark Memory Analyzer — универсальная утилита, которая используется для проведения точных тестов низкоуровневых характеристик оперативной памяти. Есть возможность получения информацию типе и емкости установленных модулей. Также с помощью приложения можно провести анализ других комплектующих компьютера: процессор, материнская плата.

Утилита полностью совместима с операционной системой Windows (32/64 бит), но язык интерфейса — английский. Модель распространения программы RightMark Memory Analyzer — бесплатная.

После запуска утилиты откроется главное окно. Чтобы начать процесс тестирования оперативной памяти, необходимо перейти в раздел «Ram Performance». Здесь пользователи могут выполнить анализ производительности ОЗУ. Для этого нужно указать минимальный и максимальный размеры блоков в KB. Также в этом разделе нужно отметить галочкой тип тестов.

RightMark Memory Analyzer

Чтобы запустить процесс проверки ОЗУ, необходимо нажать кнопку «Run». Второй доступный раздел для тестирования памяти — «RAM Stability». Здесь пользователи утилиты могут проверит стабильности ОЗУ. Для этого нужно указать размер блока в KB, количество времени на выполнение теста и т.д.

Тест ОЗУ в RightMark Memory Analyzer

В разделе «Results» программы RightMark Memory Analyzer можно посмотреть результаты всех проведенных тестов оперативной памяти. При необходимости отчеты можно сохранить на компьютере. Для этого следует воспользоваться функцией «Save», которая расположена в нижней части раздела.

Сведения об ОЗУ в RightMark Memory Analyzer

Преимущества RightMark Memory Analyzer:

  • простой и удобный интерфейс;
  • большой выбор тестов оперативной памяти:
  • инструмент для просмотра истории анализа ОЗУ;
  • бесплатная модель распространения;
  • отсутствует официальная поддержка русского языка;
  • нет инструмента для отслеживания основных показателей оперативной памяти в режиме реального времени.

Fresh RAM

Fresh RAM — программа, которая используется для проверки и оптимизации оперативной памяти. С помощью утилиты можно освободить ОЗУ: сжать информацию, чтобы увеличить скорость чтения. Благодаря этому заметно повышается производительность системы. Также приложение показывает текущее состояние оперативной памяти в режиме реального времени.

Программа полностью совместима с операционной системой Windows (32/64 бит), но не переведена на русский язык.Модель распространения приложения Fresh RAM — условно-бесплатная. Чтобы получить полную версию ПО, необходимо купить лицензию. Стоимость лицензионной версии составляет 15 долларов, но доступна бесплатная пробная версия на 30 дней, которая позволяет опробовать основные функции программы.

Читайте также:
Destination folder что это за программа

После запуска утилиты откроется главное окно, в котором отображается текущее состояние оперативной памяти: количество свободной и используемой памяти в процентах и мегабайтах.

Fresh RAM

В левой части интерфейса отображается небольшой график состояния ОЗУ «Free RAM Monitor». Чтобы посмотреть подробную информацию о памяти, необходимо нажать кнопку «Details».В открывшемся окне появится полная информация об ОЗУ: процессы, которые загружают систему; самое ресурсоемкое приложение; график работы оперативной памяти.

Проверка ОЗУ в Fresh RAM

  • удобный интерфейс;
  • отслеживание основных параметров оперативной памяти в режиме реального времени;
  • возможность оптимизации ОЗУ для повышения производительности системы.
  • нет полноценных тестов скорости чтения и записи памяти.

Источник: www.softsalad.ru

Программа memory run что это

Загрузка. Пожалуйста, подождите.

X

Сообщение сайта

(Сообщение закроется через 2 секунды)
Memory, Memory run at single channel

beol

Просмотр профиля

03/09/2004, 09:07

Группа: Пользователи
Сообщений: 10
Регистрация: 19/02/2004
Пользователь №: 4 640

Народ, у меня в самом начале, когда включаешь комп., он после проверки памяти выдает эту надпись «Memory run at single channel», может кто подскажет, что это означает.

Wolflin

Просмотр профиля

03/09/2004, 09:28

Группа: Пользователи
Сообщений: 149
Регистрация: 21/05/2004
Пользователь №: 5 947

у тебя мамка двоканальная, но сейчас работает в одноканальном режиме

beol

Просмотр профиля

03/09/2004, 14:25

Группа: Пользователи
Сообщений: 10
Регистрация: 19/02/2004
Пользователь №: 4 640

. то есть всё нормально ?
У меня стоит два модуля памяти.

mentor

Просмотр профиля

03/09/2004, 14:34

Группа: Участник
Сообщений: 5 488
Регистрация: 06/08/2003
Из: Chelyabinsk
Пользователь №: 3 088

Двухканальный режим памяти — это когда чтение/запись идет по двух каналам — пропускная способность памяти в 2 раза больше, поэтому и комп побыстрее пашет. Скорее всего эта фича в биосе отключена.

Barsuk

Просмотр профиля

03/09/2004, 14:39

Группа: Модераторы
Сообщений: 5 179
Регистрация: 19/09/2002
Из: Владивосток
Пользователь №: 770

в биосе вряд ли, наверное только один модуль памяти установлен, или два модуля, но не в тех слотах.

serg_k27

Просмотр профиля

03/09/2004, 15:41

Группа: Участник
Сообщений: 844
Регистрация: 29/06/2002
Пользователь №: 220

не в тех слотах сто пудов

Sashkin

Просмотр профиля

06/09/2004, 17:41

Группа: Участник
Сообщений: 1 212
Регистрация: 08/05/2003
Из: Msk
Пользователь №: 2 140

или два модуля в тех слотах, но разной емкости.

Barsuk

Просмотр профиля

06/09/2004, 17:44

Группа: Модераторы
Сообщений: 5 179
Регистрация: 19/09/2002
Из: Владивосток
Пользователь №: 770

емкость не имеет значения, имхо. По крайней мере у меня на Epox 8RD3+ стояли два модуля разной емкости, при это Dual Chanel работал.

Sashkin

Просмотр профиля

06/09/2004, 17:48

Группа: Участник
Сообщений: 1 212
Регистрация: 08/05/2003
Из: Msk
Пользователь №: 2 140

а помоему двухканальность возможно только в том случае, когда в первом банке и во втором одинаковое количество памяти. у меня кажись это в описании к мат. плате написано.
впрочем, может я что-то путаю.
пойду почитаю.

RacerMan

Просмотр профиля

06/09/2004, 20:08

Группа: Участник
Сообщений: 1 460
Регистрация: 28/07/2002
Из: Обнинск, Калужская обл., Россия
Пользователь №: 457

а помоему двухканальность возможно только в том случае, когда в первом банке и во втором одинаковое количество памяти. у меня кажись это в описании к мат. плате написано.
впрочем, может я что-то путаю.
пойду почитаю.
[right][snapback]216128[/snapback][/right]

Насколько я помню, для матерей под Атлоны возможно иметь разные модули и получать их двухканальную работу. Вопрос в том, насколько для Фтлона это важно. Пень4 к этому очень хорошо (я бы даже сказал, со вкусом) относится. А для AMD по-моему частота шины важнее всех живых . поскольку существенного прироста производительности вроде как от этого двухканального режима нет там.
P.S. Если я ошибаюсь — поправьте меня.. только не больно.

Barsuk

Просмотр профиля

07/09/2004, 04:53

Группа: Модераторы
Сообщений: 5 179
Регистрация: 19/09/2002
Из: Владивосток
Пользователь №: 770

В реальных приложениях прирост от двухканальности я не мерял, ограничился тестом SiSoft Sandra. Насколько я помню, прирост в тесте подсистемы памяти составил процентов 10. Это я про AMD говорю.

Sashkin
я не электронщик, конечно, просто привел факт, который лично лицезрел.

Wolflin

Просмотр профиля

07/09/2004, 09:46

Группа: Пользователи
Сообщений: 149
Регистрация: 21/05/2004
Пользователь №: 5 947

еще двоканальный режим отключается если использовать интегрированое видео

Sashkin

Просмотр профиля

07/09/2004, 11:32

Группа: Участник
Сообщений: 1 212
Регистрация: 08/05/2003
Из: Msk
Пользователь №: 2 140

Barsuk, я тоже не электронщик и в железе разбираюсь весьма посредственно.
но до этого момента был уверен, что для двухканальности в первом банке и во втором должно быть одинаковое кол-во памяти. теперь сомневаюсь
самому интересно стало
почитал описание. там как-то неопределенно написано.
почитал фак с оверклокерса по разгону памяти:

Я добавил к своему модулю 512 МБ ещё один – 256 МБ, но двухканальный режим не включился. Почему?
(Вариант: Как правильно ставить модули для двухканального режима?)
Сумма мегабайт в одном канале должна быть равна сумме мегабайт в другом канале. Лучше всего, если будут использованы идентичные модули – одна или две пары, но в принципе можно использовать и разные. Главное – чтобы модуль, имеющий наибольший объём, находился в нулевом банке памяти, а оставшиеся два слота от другого канала были заполнены таким же количеством мегабайт. То есть варианты 512+512+0 и 512+256+256 имеют право на существование, а 512+512+256 или 512+128+128 – нет. Для четырёх слотов могут быть комбинации типа 512+0+512+0, 512+0+256+256, 512+256+512+256.

У меня 3 планки по 256 МБ стоят и работают в режиме Dual channel! Почему?
На http://www.8rdafaq.com разобрали ситуацию: при таком положении модулей Dual-mode 128 bit будет работать на одном модуле. Второй и третий модуль будут работать в режиме 64 bit. Так что всё-таки оптимальный режим – когда в обоих банках одинаковое количество памяти.

а если два разных модуля, а не три — может такая же ситуация?

Источник: 3dcenter.ru

Ошибка Out of memory — как исправить

Многие пользователи ПК во время работы с какой-либо программой могут столкнуться с «вылетом» указанной программы, и появившимся сообщением «Out of memory». Возникшая проблема может иметь множество причин, начиная от банального недостатка памяти на пользовательском ПК, и заканчивая некорректной работой с памятью какой-либо программы.

Ошибка out of memory

Причины появления дисфункции

Сообщение «Out of memory» (в переводе дословно «вне памяти», или «недостаточно памяти») обычно возникает при недостатке памяти на пользовательском компьютере. В частности же, в появлении данной ошибки «виновен» следующий набор факторов:

  • Недостаток памяти RAM на вашем ПК (рабочей памяти, планки которой установлены на материнской плате вашего компьютера). Если на вашем компьютере установлен всего 1 гигабайт памяти, вы будете встречаться с описываемой ошибкой довольно часто. Нормальным же ныне считается наличие на компьютере 4 гигабайт памяти и выше;
  • Недостаток места на жёстком диске.

Когда вашему компьютеру не хватает физической R.A.M. памяти, он заимствует часть места на жёстком диске, и создаёт так называемую «виртуальную память». Система временно хранит в такой виртуальной памяти ту часть данных, которая не помещается в памяти обычной. Такие данные обычно хранятся в файле «pagefile.sys», размер которого может увеличиваться или уменьшаться в зависимости от специфики работы вашей ОС. Если на диске будет недостаточно места, файл «pagefile.sys» не сможет расти, и пользователь получит рассматриваемую ошибку.

Планка памяти и датчик

  • При одновременном запуске на ПК большого количества программ, каждая из которых бронирует часть памяти ПК под свои задачи;
  • При запуск большого количества вкладок браузера. Веб-навигаторы уровня «Firefox» или «Google Chrome» способны занимать от 500 мегабайт до 1 гигабайта памяти под свой функционал, при этом число открытых вкладок и соответствующей обслуживающей памяти может быть ограничено системой. Специалисты Майрософт называют такую проблему «the desktop heap limitation» — «ограничение кучи рабочего стола»);
  • Некорректная работа с памятью ряда программ (наиболее часто это игровые программы);
  • Не оптимальный размер файла подкачки, с которым работает система.
Читайте также:
Epson scan что это за программа

Как исправить ошибку «Out of memory»

Для решения указанной проблемы рекомендую сделать следующее:

Много открытых вкладок

  1. Перезагрузите ваш ПК, и запустите требуемую программу вновь. Возможно, что проблема имеет случайный характер, и более повторяться не будет;
  2. Перед запуском нужной программы закройте другие ненужные программы (браузер, музыкальный или видео плеер, текстовый или графический редактор, мессенджер и так далее);
  3. Если проблема возникает во время серфинга в сети, закройте всё множество вкладок вашего браузера (при наличии), оставив лишь одну или две.

Альтернативным вариантом решения проблемы является установка соответствующего фикса от Майкрософт. Или использование расширений или дополнений для браузера уровня «The Great Suspender» для «Google Chrome», хорошо работающего с ненужными вкладками браузера.

Планка памяти

  • Добавьте оперативной памяти на ваш ПК. Если у вас на компьютере установлено 1-2 гигабайта памяти, будет оптимальным довести её объём до 4 гигабайт (а для 64-битных Виндовс 7, 8 и 10 версии рекомендую 8 и более гигабайт);
  • Убедитесь, что на вашем жёстком диске (или SSD) достаточно свободного места. При необходимости, освободите диск от ненужных файлов;
  • Используйте инструмент командной строки BCDEdit для изменения параметров загрузки системы. Если у вас на ПК установлена Виндовс 7 и более, запустите командную строку от имени администратора на Виндовс 7 и Виндовс 10, и в ней наберите:

bcdedit/set IncreaseUserVa 3072

И нажмите на ввод, и перезагрузите ваш ПК. Функционал данной команды позволяет выделить пользовательским приложениям 3 гигабайта оперативной памяти для работы. В некоторых системах этого может быть слишком много, потому если после ввода данной команды система начала чаще сбоить, то введите в командной строке от имени администратора:

bcdedit /set IncreaseUserVa 2560 — что позволит задействовать 2,5 гигабайта вместо ранее забронированных 3.

Если ситуацию этим исправить не удалось, верните настройки на состояние по умолчанию:

bcdedit /deletevalue IncreaseUserVa

    Увеличьте объём файла подкачки. Нажмите кнопку «Пуск», в строке поиска введите sysdm.cpl и нажмите ввод. В открывшемся окне настроек системы выберите «Дополнительно» — «Быстродействие» — «Параметры» — «Дополнительно» — «Виртуальная память» — «Изменить». Снимите галочку с опции автоматического размера, поставьте галочку на «Указать размер», и поставьте исходный размер в 8192, и максимальный в 8192. Затем выберите «Задать»;

Окно виртуальной памяти

Установите нужный размер файла подкачки

Заключение

Ошибка «Out of memory» может иметь множество причин, связанных как с физическим недостатком памяти на ПК, так и другими детерминантами, изложенными мной выше. Для решения проблемы советую закрыть ненужные программы (вкладки браузера) на вашем компьютере (тем самым разгрузив его память), а самым эффективным инструментом является установка дополнительной планки памяти на ПК, что в большинстве случаев поможет избавиться от ошибки на вашем компьютере.

Источник: sdelaicomp.ru

Node.js: управление памятью, доступной приложениям, выполняемым в контейнерах

При запуске Node.js-приложений в контейнерах Docker традиционные настройки памяти не всегда работают так, как ожидается. Материал, перевод которого мы сегодня публикуем, посвящён поиску ответа на вопрос о том, почему это так. Здесь же будут приведены практические рекомендации по управлению памятью, доступной Node.js-приложениям, работающим в контейнерах.

Обзор рекомендаций

Предположим, Node.js-приложение выполняется в контейнере с установленным лимитом памяти. Если речь идёт о Docker, то для установки этого лимита могла быть использована опция —memory . Нечто подобное возможно и при работе с системами оркестрации контейнеров. В таком случае рекомендуется, при запуске Node.js-приложения, использовать опцию —max-old-space-size . Это позволяет сообщить платформе о том, какой объём памяти ей доступен, а так же учесть то, что этот объём должен быть меньше лимита, заданного на уровне контейнера.

Когда Node.js-приложение выполняется внутри контейнера, задавайте ёмкость доступной ему памяти в соответствии с пиковым значением использования активной памяти приложением. Это делается в том случае, если ограничения памяти контейнера можно настраивать.

Теперь поговорим о проблеме использования памяти в контейнерах подробнее.

Лимит памяти Docker

По умолчанию контейнеры не имеют ограничений по ресурсам и могут использовать столько памяти, сколько позволяет им операционная система. У команды docker run имеются опции командной строки, позволяющие задавать лимиты, касающиеся использования памяти или ресурсов процессора.

Команда запуска контейнера может выглядеть так:

docker run —memory —interactive —tty bash

Обратите внимание на следующее:

  • x — это лимит объёма памяти, доступной контейнеру, выраженный в единицах измерения y .
  • y может принимать значение b (байты), k (килобайты), m (мегабайты), g (гигабайты).

docker run —memory 1000000b —interactive —tty bash

Здесь лимит памяти установлен в 1000000 байт.

Для проверки лимита памяти, установленного на уровне контейнера, можно, в контейнере, выполнить следующую команду:

cat /sys/fs/cgroup/memory/memory.limit_in_bytes

Поговорим о поведении системы при указании с помощью ключа —max-old-space-size лимита памяти Node.js-приложения. При этом данный лимит памяти будет соответствовать лимиту, установленному на уровне контейнера.

То, что в имени ключа называется «old-space», представляет собой один из фрагментов кучи, управляемой V8 (то место, где размещаются «старые» JavaScript-объекты). Этот ключ, если не вдаваться в детали, которых мы коснёмся ниже, контролирует максимальный размер кучи. Подробности о ключах командной строки Node.js можно почитать здесь.

В общем случае, когда приложение пытается использовать больше памяти, чем доступно в контейнере, его работа завершается.

В следующем примере (файл приложения называется test-fatal-error.js ) в массив list , с интервалом в 10 миллисекунд, помещают объекты MyRecord . Это приводит к бесконтрольному росту кучи, имитируя утечку памяти.

‘use strict’; const list = []; setInterval(()=> < const record = new MyRecord(); list.push(record); >,10); function MyRecord() < var x=’hii’; this.name = x.repeat(10000000); this.id = x.repeat(10000000); this.account = x.repeat(10000000); >setInterval(()=> < console.log(process.memoryUsage()) >,100);

Обратите внимание на то, что все примеры программ, которые мы будем тут рассматривать, помещены в образ Docker, который можно загрузить с Docker Hub:

docker pull ravali1906/dockermemory

Вы можете воспользоваться этим образом для самостоятельных экспериментов.

Кроме того, можно упаковать приложение в контейнер Docker, собрать образ и запустить его с указанием лимита памяти:

docker run —memory 512m —interactive —tty ravali1906/dockermemory bash

Здесь ravali1906/dockermemory — это имя образа.

Теперь можно запустить приложение, указав лимит памяти для него, превышающий лимит контейнера:

$ node —max_old_space_size=1024 test-fatal-error.js < rss: 550498304, heapTotal: 1090719744, heapUsed: 1030627104, external: 8272 >Killed

Здесь ключ —max_old_space_size представляет собой лимит памяти, указываемый в мегабайтах. Метод process.memoryUsage() даёт сведения об использовании памяти. Значения показателей выражены в байтах.

Работа приложения в некий момент времени принудительно завершается. Происходит это тогда, когда объём использованной им памяти переходит некую границу. Что это за граница? О каких ограничениях на объём памяти можно говорить?

Ожидаемое поведение приложения, запущенного с ключом —max-old-space-size

По умолчанию максимальный размер кучи в Node.js (вплоть до версии 11.x) составляет 700 Мб на 32-битных платформах, и 1400 Мб на 64-битных. О настройке этих значений можно почитать здесь.

В теории, если установить с помощью ключа —max-old-space-size лимит памяти, превышающий лимит памяти контейнера, можно ожидать, что приложение будет завершено защитным механизмом ядра Linux OOM Killer.

В реальности этого может и не случиться.

Реальное поведение приложения, запущенного с ключом —max-old-space-size

Приложению, сразу после запуска, не выделяется вся память, лимит которой указан с помощью —max-old-space-size . Размер JavaScript-кучи зависит от нужд приложения. О том, какой размер памяти использует приложение, можно судить на основании значения поля heapUsed из объекта, возвращаемого методом process.memoryUsage() . Фактически, речь идёт о памяти, выделенной в куче под объекты.

Читайте также:
Adobe creative что это за программа и нужна ли она

В результате мы приходим к выводу о том, что приложение будет принудительно завершено в том случае, если размер кучи окажется больше лимита, заданного ключом —memory при запуске контейнера.

Но в реальности этого тоже может не случиться.

При профилировании ресурсоёмких Node.js-приложений, которые запущены в контейнерах с заданным лимитом памяти, можно наблюдать следующие паттерны:

  1. OOM Killer срабатывает гораздо позже того момента, когда значения heapTotal и heapUsed оказываются значительно превышающими ограничения на объём памяти.
  2. OOM Killer никак не реагирует на превышение ограничений.

Объяснение особенностей поведения Node.js-приложений в контейнерах

Контейнер наблюдает за одним важным показателем приложений, которые в нём выполняются. Это — RSS (resident set size). Этот показатель представляет некую часть виртуальной памяти приложения.

Более того, он представляет собой фрагмент памяти, которая выделена приложению.

Но и это ещё не всё. RSS — это часть активной памяти, выделенной приложению.

Активной может быть не вся память, выделенная приложению. Дело в том, что «выделенная память» не обязательно физически выделяется до тех пор, пока процесс не начнёт ей по-настоящему пользоваться. Кроме того, в ответ на запросы на выделение памяти от других процессов, операционная система может сбросить в файл подкачки неактивные фрагменты памяти приложения и передать освободившееся пространство другим процессам. А когда приложению снова понадобятся эти фрагменты памяти, они будут взяты из файла подкачки и возвращены в физическую память.

Показатель RSS указывает на объём активной и доступной приложению памяти в его адресном пространстве. Именно он влияет на принятие решения о принудительном завершении работы приложения.

Доказательства

▍Пример №1. Приложение, которое выделяет память под буфер

В следующем примере, buffer_example.js , показана программа, которая выделяет память под буфер:

const buf = Buffer.alloc(+process.argv[2] * 1024 * 1024) console.log(Math.round(buf.length / (1024 * 1024))) console.log(Math.round(process.memoryUsage().rss / (1024 * 1024)))

Для того чтобы объём памяти, выделяемой программой, превысил бы лимит, заданный при запуске контейнера, сначала запустим контейнер следующей командой:

docker run —memory 1024m —interactive —tty ravali1906/dockermemory bash

После этого запустим программу:

$ node buffer_example 2000 2000 16

Как видно, система не завершила выполнение программы, хотя при этом выделенная программой память и превышает лимит контейнера. Произошло это из-за того, что программа не работает со всей выделенной памятью. Показатель RSS очень мал, он не превышает лимит памяти контейнера.

▍Пример №2. Приложение, заполняющее буфер данными

В следующем примере, buffer_example_fill.js , память не просто выделяется, а ещё и заполняется данными:

const buf = Buffer.alloc(+process.argv[2] * 1024 * 1024,’x’) console.log(Math.round(buf.length / (1024 * 1024))) console.log(Math.round(process.memoryUsage().rss / (1024 * 1024)))
docker run —memory 1024m —interactive —tty ravali1906/dockermemory bash

После этого запустим приложение:

$ node buffer_example_fill.js 2000 2000 984

Как видно, даже теперь приложение не завершается! Почему? Дело в том, что когда объём активной памяти достигает лимита, заданного при запуске контейнера, и при этом в файле подкачки есть место, некоторые из старых страниц памяти процесса перемещаются в файл подкачки. Освобождённая память оказывается доступной тому же самому процессу.

По умолчанию Docker выделяет под файл подкачки пространство, равное лимиту памяти, заданному с помощью флага —memory . Учитывая это можно сказать, что у процесса есть 2 Гб памяти — 1 Гб в активной памяти, и 1 Гб — в файле подкачки. То есть, благодаря тому, что приложение может пользоваться своей же памятью, содержимое которой временно перемещается в файл подкачки, размер показателя RSS находится в пределах лимита контейнера. В результате приложение продолжает работать.

▍Пример №3. Приложение, заполняющее буфер данными, выполняющееся в контейнере, в котором файл подкачки не используется

Вот код, с которым мы будем здесь экспериментировать (это — тот же файл buffer_example_fill.js ):

const buf = Buffer.alloc(+process.argv[2] * 1024 * 1024,’x’) console.log(Math.round(buf.length / (1024 * 1024))) console.log(Math.round(process.memoryUsage().rss / (1024 * 1024)))

На этот раз запустим контейнер, явным образом настроив особенности работы с файлом подкачки:

docker run —memory 1024m —memory-swap=1024m —memory-swappiness=0 —interactive —tty ravali1906/dockermemory bash
$ node buffer_example_fill.js 2000 Killed

Видите сообщение Killed ? Когда значение ключа —memory-swap равно значению ключа —memory , это указывает контейнеру на то, что ему не следует использовать файл подкачки.

Кроме того, по умолчанию ядро операционной системы, в которой работает сам контейнер, может сбрасывать в файл подкачки некий объём анонимных страниц памяти, используемых контейнером. Мы, устанавливая в 0 флаг —memory-swappiness , отключаем эту возможность. В результате оказывается, что внутри контейнера файл подкачки не используется. Процесс завершается тогда, когда показатель RSS превышает лимит памяти контейнера.

Общие рекомендации

Когда Node.js-приложения запускают с ключом —max-old-space-size , значение которого превышает лимит памяти, заданный при запуске контейнера, может показаться, что Node.js «не обращает внимания» на лимит контейнера. Но, как видно из предыдущих примеров, явной причиной подобного поведения является тот факт, что приложение просто не использует весь объём кучи, заданный с помощью флага —max-old-space-size .

Помните о том, что приложение не всегда будет вести себя одинаково в том случае, если оно использует больше памяти, чем доступно в контейнере. Почему? Дело в том, что на активную память процесса (RSS) влияет множество внешних факторов, на которые не может воздействовать само приложение. Они зависят от нагруженности системы и от особенностей окружения.

Например — это особенности самого приложения, уровень параллелизма в системе, особенности работы планировщика операционной системы, особенности работы сборщика мусора, и так далее. Кроме того, эти факторы, от запуска к запуску приложения, могут меняться.

Рекомендации о настройке размера Node.js-кучи для тех случаев, когда можно управлять этим параметром, но не ограничениями памяти уровня контейнера

  • Запустите минимальное Node.js-приложение в контейнере и измерьте статический размер RSS (в моём случае, для Node.js 10.x, это примерно 20 Мб).
  • Куча Node.js содержит не только область old_space, но и другие (такие, как new_space, code_space, и так далее). Поэтому, если учитывать стандартную конфигурацию платформы, стоит рассчитывать на то, что программе понадобится ещё около 20 Мб памяти. Если стандартные настройки менялись — эти изменения также нужно учитывать.
  • Теперь нужно вычесть полученное значение (предположим, это будет 40 Мб) из объёма памяти, доступной в контейнере. То, что осталось, представляет собой значение, которое, не опасаясь завершения программы от нехватки памяти, можно указать в качестве значения ключа —max-old-space-size .

Рекомендации по настройке лимитов памяти контейнеров для тех случаев, когда этот параметр контролировать можно, а параметры Node.js-приложения — нет

  • Запускайте приложение в режимах, позволяющих выяснить пиковые значения потребляемой им памяти.
  • Проанализируйте показатель RSS. В частности, тут может, наряду с методом process.memoryUsage() , пригодиться и команда Linux top .
  • При условии, что в контейнере, в котором планируется запускать приложение, ничего кроме него выполняться не будет, полученное значение можно использовать в качестве лимита памяти контейнера. Для того чтобы подстраховаться, рекомендуется увеличить его хотя бы на 10%.

Итоги

В Node.js 12.x некоторые из рассмотренных здесь проблем решаются путём адаптивной настройки размера кучи, выполняемой в соответствии с объёмом доступной оперативной памяти. Этот механизм работает и при запуске Node.js-приложений в контейнерах. Но настройки могут и отличаться от настроек, используемых по умолчанию.

Это, например, происходит в тех случаях, когда при запуске приложения использовался ключ —max_old_space_size . Для таких случаев всё вышесказанное остаётся актуальным. Это говорит о том, что тот, кто запускает Node.js-приложения в контейнерах, должен внимательно и ответственно относиться к настройкам памяти. Кроме того, знание стандартных ограничений на использование памяти, довольно консервативных, позволяет улучшить работу приложений благодаря обдуманному изменению этих ограничений.

Уважаемые читатели! Сталкивались ли вы с проблемами нехватки памяти при запуске Node.js-приложений в контейнерах Docker?

Источник: habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru