-
Notifications
You must be signed in to change notification settings - Fork 48
Description
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:
- Set
check-statein config toCAPTCHA_POSITION(orONLY_CAPTCHA). - Ensure Map Captcha is enabled in
captcha-generator. - Start the proxy and have players join and leave repeatedly (e.g., 10-20 times).
- Take a Heap Dump, spark, velocity heapdump.
- See massive accumulation of
MapDataobjects 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.
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:
net.elytrium.limboapi.api.protocol.packets.data.MapData(~133k instances)net.elytrium.limboapi.protocol.packets.s2c.MapDataPacket(~133k instances)byte[](pixel data)
I have tried the following mitigations, but the leak persists:
- Enabled
prepare-captcha-packets: true. - Disabled all animations (
font-ripple,font-rotate,font-outlineset tofalse). - Reduced
images-countfrom 1000 to 50. - Changed
check-statetoONLY_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.
Как воспроизвести
Шаги для воспроизведения поведения:
- Установить параметр
check-stateв конфиге наCAPTCHA_POSITION(илиONLY_CAPTCHA). - Убедиться, что Map Captcha включена в секции
captcha-generator. - Запустить прокси и перезаходить на сервер несколько раз (например, 10-20 раз).
- Сделать дамп памяти (Heap Dump), spark, velocity heapdump.
- Наблюдать огромное накопление объектов
MapData, которые не очищаются.
Ожидаемое поведение
Объекты данных карт должны удаляться сборщиком мусора после отправки пакета игроку или, как минимум, после закрытия сессии игрока (дисконнекта). Потребление памяти не должно расти бесконечно с каждым заходом.
Информация о сервере:
- Версии плагинов Limbo:
- LimboFilter: Latest (Последняя)
- LimboAPI: Latest (Последняя)
- Velocity: Latest (Последняя)
Дополнительный контекст
Анализ Heap Dump показывает основных потребителей памяти:
net.elytrium.limboapi.api.protocol.packets.data.MapData(~133 тыс. экземпляров)net.elytrium.limboapi.protocol.packets.s2c.MapDataPacket(~133 тыс. экземпляров)byte[](данные пикселей)
Я пробовал следующие меры для смягчения проблемы, но утечка сохраняется:
- Включил
prepare-captcha-packets: true. - Отключил все анимации (
font-ripple,font-rotate,font-outlineустановлены вfalse). - Уменьшил
images-countс 1000 до 50. - Изменил
check-stateнаONLY_CAPTCHA.
Несмотря на эти изменения конфигурации, объекты продолжают накапливаться. Похоже, ссылки на эти пакеты удерживаются бесконечно внутри плагина.
