К содержимому
Tickwise
КритичноПамятьSIG-MEM-004

Исчерпана direct-память (OutOfMemoryError: direct buffer memory)

Платформы
Paper · Purpur · один сервер
Проверено
Проверено
Уверенность
Уверенность 80%

Как это выглядит в логе

Достаточно одной из строк. Агент сверяет их с логом локально, на вашем сервере.

logs/latest.log
  • [WARN] java.lang.OutOfMemoryError:
  • [WARN] OutOfDirectMemoryError: failed to allocate

Симптомы

  • Игроков выкидывает, соединения рвутся, сетевые плагины/голосовой чат/карты перестают работать
  • В логе: «Cannot reserve N bytes of direct buffer memory» или Netty «OutOfDirectMemoryError»

Причина

Закончилась off-heap (direct) память, которую используют Netty и плагины с нативными буферами (голосовой чат, веб-карты, сжатие). Лимит по умолчанию равен -Xmx либо задан -XX:MaxDirectMemorySize.

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

  • Утечка direct-буферов в плагине (голосовой чат, веб-карта, пакетные плагины)
  • Слишком маленький -XX:MaxDirectMemorySize или -Dio.netty.maxDirectMemory
  • Всплеск сетевой нагрузки (много игроков, атака, большие пакеты/ресурспак)

Как исправитьСредний риск

  1. Перезапустите сервер, если соединения не восстанавливаются.
  2. Посмотрите в evidence, какой плагин/поток выделял память (фреймы trace), и обновите этот плагин.
  3. Проверьте флаги JVM: если задан -XX:MaxDirectMemorySize или -Dio.netty.maxDirectMemory — увеличьте значение с учётом лимита контейнера (heap + direct + ~1 ГБ не должны превышать лимит).
  4. Если OOM повторяется — сравните время ошибок с пиками онлайна/трафика и временем установки сетевых плагинов.

Источники