Когда память заканчивается, Linux выбирает процесс, который занимает больше всего памяти, и принудительно его завершает. Обычно это игровой сервер.
Почему Память исчерпана из-за утечки или резкого роста потребления, либо контейнер упёрся в лимит памяти → Следствие Ядро принудительно завершает процесс игрового сервера → На экране Дисконнект у всех на этом сервере одновременно, возможен роллбэк недавнего прогресса
Основной ответственный Команда разработки · Разработка сервера · Совместно Команда инфраструктуры · Серверная инфраструктура
Команда разработки: задачи
Исправить утечки, задать верхнюю границу потребления памяти и при приближении к ней сохранять данные и штатно завершать работу.
Команда инфраструктуры: задачи
Настроить алерты по памяти, задать лимит памяти контейнера по фактическому потреблению, настроить очерёдность завершения процессов (oom_score_adj).
Цифры для ориентира
В журнале ядра (dmesg) остаётся запись «Out of memory: Killed process», а в Kubernetes виден статус OOMKilled. В Windows OOM killer нет, и там сервер чаще падает с ошибкой, когда не удаётся выделить память.
На графике
Массовый обрыв соединений · число подключений, расход памяти
Где смотреть
Сопоставить с моментом обрыва подключений запись «Out of memory: Killed process» в dmesg, статус пода OOMKilled в Kubernetes или прирост oom_kill в memory.events в cgroup v2
Подтверждает
В момент массового обрыва подключений есть запись о завершении процесса игрового сервера, а перед этим расход памяти дорос до лимита
Опровергает
Если записи OOM нет, а процесс завершился, смотреть лог падения и core dump, как в причине «Падение сервера»
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)
Источники
mm/oom_kill.c (Linux v6.12)Linux kernel Оценка рассчитывается так, чтобы самый высокий балл получал процесс, занимающий больше всего памяти (с учётом oom_score_adj). При завершении записывается «Out of memory: Killed process …»
Pushing the Limits of Windows: Virtual MemoryMicrosoft В Windows при достижении предела выделения (commit limit) выделение памяти с фиксацией (commit) завершается ошибкой, что может привести к сбою приложения или системы
Control Group v2Linux kernel oom_kill в memory.events: число процессов в этой cgroup, завершённых OOM killer