Skip to content

[BUG] Memory Leaks. #118

@euj3ne

Description

@euj3ne

ENG:

Describe the bug
I am experiencing a severe memory leak related to the Map Captcha functionality.
Map packet objects (net.elytrium.limboapi.api.protocol.packets.data.MapData and MapDataPacket) are accumulating in the Heap memory and are not being Garbage Collected after players leave or pass the check.

With only 15 player joins, the Heap Dump shows ~133,000 instances of map-related objects. This consumes hundreds of megabytes of RAM (mostly in byte[] arrays for pixel data) and leads to eventual OutOfMemory errors.

To Reproduce
Steps to reproduce the behavior:

  1. Set check-state in config to CAPTCHA_POSITION (or ONLY_CAPTCHA).
  2. Ensure Map Captcha is enabled in captcha-generator.
  3. Start the proxy and have players join and leave repeatedly (e.g., 10-20 times).
  4. Take a Heap Dump, spark, velocity heapdump.
  5. See massive accumulation of MapData objects that are not cleared.

Expected behavior
Map data objects should be garbage collected after the packet is sent to the player, or at least after the player session ends (disconnect). The memory usage should not grow indefinitely with every join.

Screenshots
Image

Image

Server Info (please complete the following information):

  • All Limbo plugins versions:
  • LimboFilter: Latest
  • LimboAPI: Latest
  • Velocity: Latest

Additional context
Heap Dump Analysis shows the top memory consumers are:

  1. net.elytrium.limboapi.api.protocol.packets.data.MapData (~133k instances)
  2. net.elytrium.limboapi.protocol.packets.s2c.MapDataPacket (~133k instances)
  3. byte[] (pixel data)

I have tried the following mitigations, but the leak persists:

  1. Enabled prepare-captcha-packets: true.
  2. Disabled all animations (font-ripple, font-rotate, font-outline set to false).
  3. Reduced images-count from 1000 to 50.
  4. Changed check-state to ONLY_CAPTCHA.

Despite these configuration changes, the objects continue to accumulate. It seems references to these packets are retained indefinitely.

RUS:

Описание бага
Я столкнулся с критической утечкой памяти, связанной с функционалом Map Captcha (капча на картах).
Объекты пакетов карт (net.elytrium.limboapi.api.protocol.packets.data.MapData и MapDataPacket) накапливаются в Heap-памяти и не очищаются сборщиком мусора (GC) после выхода игроков или прохождения проверки.

Всего за 15 заходов игроков дамп памяти (Heap Dump) показывает ~133,000 экземпляров объектов, связанных с картами. Это потребляет сотни мегабайт ОЗУ (в основном в массивах byte[] для пиксельных данных) и в конечном итоге приводит к ошибке OutOfMemory.

Как воспроизвести
Шаги для воспроизведения поведения:

  1. Установить параметр check-state в конфиге на CAPTCHA_POSITION (или ONLY_CAPTCHA).
  2. Убедиться, что Map Captcha включена в секции captcha-generator.
  3. Запустить прокси и перезаходить на сервер несколько раз (например, 10-20 раз).
  4. Сделать дамп памяти (Heap Dump), spark, velocity heapdump.
  5. Наблюдать огромное накопление объектов MapData, которые не очищаются.

Ожидаемое поведение
Объекты данных карт должны удаляться сборщиком мусора после отправки пакета игроку или, как минимум, после закрытия сессии игрока (дисконнекта). Потребление памяти не должно расти бесконечно с каждым заходом.

Скриншоты
Image

Image

Информация о сервере:

  • Версии плагинов Limbo:
  • LimboFilter: Latest (Последняя)
  • LimboAPI: Latest (Последняя)
  • Velocity: Latest (Последняя)

Дополнительный контекст
Анализ Heap Dump показывает основных потребителей памяти:

  1. net.elytrium.limboapi.api.protocol.packets.data.MapData (~133 тыс. экземпляров)
  2. net.elytrium.limboapi.protocol.packets.s2c.MapDataPacket (~133 тыс. экземпляров)
  3. byte[] (данные пикселей)

Я пробовал следующие меры для смягчения проблемы, но утечка сохраняется:

  1. Включил prepare-captcha-packets: true.
  2. Отключил все анимации (font-ripple, font-rotate, font-outline установлены в false).
  3. Уменьшил images-count с 1000 до 50.
  4. Изменил check-state на ONLY_CAPTCHA.

Несмотря на эти изменения конфигурации, объекты продолжают накапливаться. Похоже, ссылки на эти пакеты удерживаются бесконечно внутри плагина.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions