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