SystemdDoctor
служба не работает ядро сеть ресурсы

TCP: out of memory -- consider tuning tcp_mem

Это сообщение означает, что суммарная память под сокеты превысила предел ядра. Ядро начинает отбрасывать данные и рвать соединения. Признаки со стороны службы — обрывы и таймауты без ошибок в её собственном журнале.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Соединений больше, чем рассчитано

    Каждое соединение занимает буферы. Рост числа соединений упирается в общий предел памяти под сокеты.

  2. Буферы на соединение заданы слишком большими

    Крупные буферы ускоряют одиночную передачу, но при тысячах соединений съедают память быстрее предела.

  3. Соединения накапливаются в состоянии ожидания закрытия

    Незакрытые соединения держат буферы. Это выглядит как утечка памяти ядра.

Диагностика

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

Память, занятая сокетами, и число соединений.

cat /proc/net/sockstat

Сводка по сокетам и состояниям.

ss -s

Пределы памяти под сокеты.

sysctl net.ipv4.tcp_mem

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Соединений больше, чем рассчитано
Почему происходит
Каждое соединение занимает буферы. Рост числа соединений упирается в общий предел памяти под сокеты.
Как проверить
Посмотрите число соединений и использование памяти сокетами.
ss -s | head -5
cat /proc/net/sockstat
Как исправить
Поднимите предел памяти под сокеты и уменьшите размеры буферов на соединение. Одновременно стоит понять, откуда столько соединений: часто это отсутствие закрытия на стороне клиента.
2. Буферы на соединение заданы слишком большими
Почему происходит
Крупные буферы ускоряют одиночную передачу, но при тысячах соединений съедают память быстрее предела.
Как проверить
Посмотрите настройки буферов.
sysctl net.ipv4.tcp_rmem net.ipv4.tcp_wmem net.ipv4.tcp_mem
Как исправить
Приведите размеры буферов в соответствие с числом соединений. Значения, годные для одного быстрого канала, вредны на тысяче соединений.
3. Соединения накапливаются в состоянии ожидания закрытия
Почему происходит
Незакрытые соединения держат буферы. Это выглядит как утечка памяти ядра.
Как проверить
Посмотрите распределение состояний.
ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn | head
Как исправить
Исправьте закрытие соединений в приложении. Сокращать сроки ожидания в ядре — полумера, маскирующая причину.

Пример вывода

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

kernel: TCP: out of memory -- consider tuning tcp_mem
kernel: net_ratelimit: 214 callbacks suppressed
nginx[1200]: 2026/09/15 16:31:02 [error] 1200#0: *84213 recv() failed (104: Connection reset by peer)

Связанные ошибки

Где встречается чаще всего

Источники

  • Документация ядра: настройки IP документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено нагрузочным прогоном с тысячами одновременных соединений.
    собственная проверка, systemd 255
    сверено 15 сентября 2026