Elytrium / Elytrium/LimboFilter
[BUG] Memory Leaks.
- Dominant language
- Java
- Stars
- 172
- Forks
- 52
- PR merge metrics
- No merged PRs in 30d
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:
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**
**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`, которые не очищаются.
**Ожидаемое поведение**
Объекты данных карт должны удаляться сборщиком мусора после отправки пакета игроку или, как минимум, после закрытия сессии игрока (дисконнекта). Потребление памяти не должно расти бесконечно с каждым заходом.
**Скриншоты**
**Информация о сервере:**
- Версии плагинов 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`.
Несмотря на эти изменения конфигурации, объекты продолжают накапливаться. Похоже, ссылки на эти пакеты удерживаются бесконечно внутри плагина.
Contributor guide
No contributing guide indexed for this repository
Research direction
Reproduce the issue with check-state set to CAPTCHA_POSITION or ONLY_CAPTCHA and Map Captcha enabled, then inspect a heap dump for retained MapData and MapDataPacket instances and their byte[] pixel data. Trace what keeps these objects reachable after player disconnects; done means repeated joins and leaves no longer cause indefinite growth or OutOfMemory errors.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- backend, performance
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100