Что это значит

На сервере кончилась оперативная память, и ядро завершило процесс, который занимал её больше всех. Часто это PostgreSQL, Elasticsearch или сервис RX на .NET. Убитая база означает перезапуск и обрыв всех соединений, убитый сервис означает ошибки у пользователей до его перезапуска.

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

Как проверить

  1. Кого и когда убили:
journalctl -k | grep -iE "out of memory|oom-kill"
  1. Кто сколько ест сейчас: ps aux --sort=-rss | head
  2. Настройки памяти основных потребителей: shared_buffers и work_mem в PostgreSQL, размер кучи Elasticsearch (-Xmx), число экземпляров сервисов RX на сервере.

Что сделать

  1. Свести бюджет памяти: сумма того, что могут занять база, поиск, сервисы и кэш файловой системы, должна помещаться в память сервера с запасом. Подсказка для PostgreSQL в калькуляторе настроек.
  2. Elasticsearch: куча не больше половины памяти сервера.
  3. Не держать базу и тяжёлые сервисы на одной машине без жёстких лимитов.
  4. Поставить алерт на остаток памяти и на сам факт срабатывания OOM killer.