Из-за временных ограничений на территории РФ наблюдаются проблемы с оплатой. Если платёж не проходит, оставьте запрос в службу поддержки.Служба поддержки работает 24/7 — мы всегда на связи по вопросам хостинга и серверов.Открыт прием заявок на аренду выделенных серверов и размещение оборудования в дата-центре.Напоминаем: рекомендуем включить резервное копирование для дополнительной защиты данных.Доступна новая линейка VPS/VDS с NVMe-дисками и увеличенной производительностью.Технические работы на части серверов завершены. Все сервисы работают в штатном режиме.
Статья5 мин чтенияПросмотры0

Процесс завершился из-за памяти, хотя на VPS осталась свободная RAM

Свободная память сервера не исключает ограничения отдельной группы процессов. Разбираем локальный OOM, смысл счётчиков cgroup v2 и сведения, которые нужны до изменения тарифа.

Комментарии 0

Модуль оперативной памяти внутри небольшого стеклянного объёма на фоне просторного помещения.
В этой статье

Импорт каталога прервался, приложение запустилось заново, а на графике VPS ещё несколько свободных гигабайт. Эти наблюдения могут быть совместимы. Linux ограничивает память не только для всей машины: у группы процессов бывает собственный предел. Покупка дополнительной RAM не устранит такой предел автоматически.

Главный вопрос — на каком уровне закончился разрешённый ресурс. Отдельно проверяют память машины, ограничения группы и правила самого приложения. В этом разборе речь о Linux с cgroup v2. Здесь нет команд изменения лимитов или воспроизведения аварии: задача — правильно прочитать свидетельства уже произошедшего события.

Три границы одной задачи

Представим учебную конфигурацию. У VPS 16 ГиБ RAM, панель показывает около 6 ГиБ доступной памяти, а службе импорта назначен предел группы 1 ГиБ. Это три разных числа. Первое описывает размер машины, второе — оценку на уровне ОС, третье — ограничение конкретной нагрузки. Свободное место за пределами разрешённого бюджета группы само по себе не делает её бюджет больше.

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

Есть и ограничения внутри приложения. Например, ошибка о достижении собственного бюджета памяти ещё не доказывает вмешательство ядра. Программа могла сама остановить операцию. Нужны исходное сообщение, время и сведения о завершении процесса: пересказ «серверу не хватило памяти» стирает важное различие.

Учебная схема: VPS имеет 16 ГиБ RAM, но группа импорта ограничена 1 ГиБ.
Учебные значения. Доступная память машины не увеличивает назначенный лимит группы.

Что именно подтверждает счётчик

В cgroup v2 параметр memory.max задаёт жёсткую границу памяти группы. Когда потребление достигает её и не удаётся освободить достаточно памяти, ядро может вызвать OOM killer внутри группы — механизм завершения процессов при нехватке памяти. Ограничения и события рассматривают в иерархии групп: родительская граница также может оказаться определяющей.

У memory.high другая роль: превышение связано с торможением задач и усиленным освобождением памяти. Само по себе превышение этой границы не вызывает OOM killer. Поэтому задержки и аварийное завершение нельзя объяснять одним названием «лимит памяти» без уточнения параметра.

В наборе событий памяти cgroup v2 есть отдельные счётчики high, max, oom и oom_kill. Последний считает процессы группы, завершённые OOM killer. Положительное значение подтверждает такие события за время жизни соответствующего счётчика, но не сообщает, что последнее завершение приложения произошло именно сейчас и именно по этой причине.

Полезны два наблюдения с известным временем. В учебном примере до импорта oom_kill равен 2, после — 3. Прирост равен одному. Он становится предметным свидетельством, если проверена та же группа и журнал связывает событие с нужным процессом. Одно позднее значение 3 без исходного снимка такой связи не устанавливает.

Основной набор счётчиков событий учитывает и события потомков. Для событий самой группы предусмотрен отдельный локальный набор. Если администратор прочитал счётчик родительской группы, вывод может относиться к другой дочерней нагрузке. После пересоздания контейнера или группы прежние и новые числа также нельзя бесконтрольно вычитать друг из друга.

Почему после сбоя память выглядит свободной

Завершённый процесс освобождает ресурсы. График, снятый после аварии, уже описывает другое состояние. Редкая запись метрик может пропустить короткий пик. Поэтому спокойный график через минуту после остановки не опровергает событие за предыдущий интервал.

Обратная ошибка — считать любое внезапное завершение доказанным OOM. Процесс могли остановить по другой причине. Само сообщение о принудительной остановке не устанавливает, кто её инициировал. Для диагноза требуется сообщение ядра, данные среды управления или другое свидетельство OOM, относящееся к тому же эпизоду.

Точно так же нужно различать доступную память хоста и сведения, видимые внутри контейнера. Интерфейс мониторинга может показывать ресурс всей машины, лимит контейнера либо собственную расчётную величину. До сравнения чисел выясните источник каждого графика, единицы и шаг измерения.

Какие данные передать администратору

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

  • Идентификатор нагрузки и группы, её действующие ограничения, ограничения родителей и время создания текущего экземпляра.

  • Изменение соответствующих счётчиков в интервале, сведения о завершении процесса и относящиеся к нему сообщения ядра.

  • Динамику потребления группы и машины, число одновременных обработчиков и изменения режима импорта.

Сбор этих сведений не требует предварительно снимать ограничения. Если чтение недоступно из контейнера, запрос направляют администратору хоста штатным способом. Отсутствие доступа нельзя записывать в отчёт как отсутствие события.

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

Полезный результат разбора звучит конкретно: во время такого-то импорта в такой-то группе появился новый факт OOM, а общий ресурс VPS оставался доступен. Или факт OOM подтвердить не удалось. Оба ответа помогают выбрать следующий шаг; фраза «добавим памяти на всякий случай» нужный уровень ограничения не называет.

Обсуждение 0

Делись опытом и задавай вопросы. Комментарии без ссылок появляются после проверки редактором.

Пока никто не написал. Начни обсуждение.