LeanCore
ActiveHytale • Version 1.7.0
LeanCore создан, чтобы снижать использование JVM heap на серверах Hytale. Пока игроки исследуют мир, каждая область, которой они касаются, держит свои чанки и сущности в памяти, а движок медленно их освобождает, поэтому heap растёт и остаётся высоким ещё долго после того, как все ушли. LeanCore это часть, которая решает, что остаётся загруженным, а что выгружается, моделируя, где находятся игроки, куда они направляются и в какие части карты они действительно возвращаются. Сколько именно памяти он освобождает, зависит от вашего мира, а выгрузка чанков включается только после запуска /leancore probe.
На локальных / solo мирах работает профиль LITE: лёгкий губернатор с адаптивным view, AFK reclaim чанков и обучением demand по умолчанию. Когда подключаются друзья, профиль STANDARD. На выделенном сервере профиль FULL.
Не влияет на FPS, GPU и TPS клиента.
Требует сервер Hytale >=0.5.6. После установки выполните /leancore status, когда сервер проработает около минуты.
С LeanCore и без него
Та же одиночная сессия, использование памяти сервера во времени. Без мода каждая область, которую вы посещаете, остаётся в памяти, и heap только растёт, пока вы не перезапустите. С LeanCore простаивающие области остывают и освобождаются, поэтому RAM растёт под нагрузкой, а затем снижается.
Server RAM over a long session (taller bars = more RAM in use)
Without LeanCore ▁▂▃▄▅▆▇███████████ climbs to the limit, then you restart
With LeanCore ▂▄▆▄▂▄▆▄▂▄▆▄▂▄▆▄▂▄ rises and falls, stays under control
Как LeanCore принимает решения
Каждое действие определяют два сигнала: насколько сейчас напряжена память и нужна ли зона. Лестница выбирает силу действия, а проверка по зоне решает, что безопасно освободить.
Давление в действие
every tick
│
read heap % + chunk pressure
│
rank against THIS server's history
│
┌───────────────┬───────┴───────┬───────────────┐
▼ ▼ ▼ ▼
COMFORT WATCH TIGHT CRITICAL
full view gentle trim unload distant max trim +
do nothing + demote idle dormant zones unload + GC
+ webhook
Оставить или освободить зону
each idle zone
│
▼
player in / near it, or pinned? ──► HOT keep, never touched
│ no
▼
inside current or predicted view? ──► keep would cause pop-in
│ no
▼
idle long enough to be dormant? ──► WARM keep, still cooling
│ yes
▼
rank: far away + unlikely to return + low built content
│
▼
release capped per pass, only chunks nobody can see,
and rolled back if it backfires
Как LeanCore думает
Это не таймер, который сбрасывает чанки по расписанию. Он держит небольшую живую модель вашего мира и решает на её основе.
1. Нагрузка относительна вашему серверу
Heap на 70% просторен на одном хосте и на грани зависания на другом, поэтому LeanCore не задаёт пороги жёстко. Он непрерывно сэмплирует долю heap, строит скользящее распределение по истории самого сервера и относит текущее значение к tier:
| Tier | Что означает | Что делает LeanCore |
|---|---|---|
| COMFORT | в пределах нормы сервера | не вмешивается, полный view radius |
| WATCH | выше обычной базы | мягкие срезы view, начинает понижать неактивные зоны |
| TIGHT | память под давлением | сильнее срезы, выгружает далёкие спящие зоны |
| CRITICAL | у предела | самые агрессивные срезы и unload, опциональные GC hint и webhook |
2. Карта группируется в зоны с температурой
LeanCore не рассуждает об отдельных чанках. Он группирует карту в зоны и отслеживает температуру: HOT -> WARM -> DORMANT -> FROZEN.
| Состояние | Значение | Кандидат на unload |
|---|---|---|
| HOT | игрок внутри или рядом, либо зона закреплена | никогда |
| WARM | последний игрок только что вышел | нет |
| DORMANT | бездействует дольше вашего warm-таймера | да, при TIGHT или хуже |
| FROZEN | бездействует долгое время | да |
Кандидатами становятся только зоны DORMANT и FROZEN, которые при этом далеки от всех игроков. Это отличает “здесь никого не было 20 минут” от “игрок вышел на секунду”.
3. Расстояние мерится честно
Проверяя, насколько зона далека от игрока, он мерит до ближайшего края чанка зоны, а не до её центра. Зона в пределах view distance любого игрока плюс один регион запаса никогда не станет кандидатом на unload. Эта граница и есть разница между возвратом памяти и появлением pop-in.
4. Он защищает то, куда вы движетесь
Игроку, бегущему к новой местности, нужно сохранить её до прибытия. LeanCore запускает модель движения на игрока: сглаженная скорость, оценка ускорения, значение уверенности и спрогнозированная позиция на несколько секунд вперёд. Эта точка становится вторым якорем, так что текущий и прогнозируемый view оба вне досягаемости.
Опциональный кинематографичный буст view расширяет дистанцию обзора для быстро движущихся. По умолчанию выключен: перезапись view radius каждый tick вызывает churn загрузки в текущем engine. Разумно включать на выделенном хосте или мощной машине; на слабых конфигурациях оставьте выключенным.
5. Он учится, какие зоны для вас важны
Ваша база, ваша шахта, путь между ними: вы возвращаетесь снова. Точку, которую вы пересекли однажды, вы больше не видите. LeanCore держит модель reuse-distance и выживаемости по зонам, превращённую в score повторного посещения, который растягивает или сжимает кулдауны зоны. Когда что-то должно уйти, eviction ранжируется по тому, насколько зона далека, и насколько маловероятно повторное посещение. С выключенной моделью reuse это чисто сводится к обычному расстоянию.
6. Он учитывает, кто игрок
Онлайн-классификатор (Activity Sense) помечает каждого игрока через softmax по недавней активности: MINER LUMBERJACK FARMER BUILDER FIGHTER EXPLORER. Это питает demand model, задающую вес удержания на игрока внутри общего бюджета. На крупных хостах policy bandit исследует, какая политика масштаба view работает лучше, holdout-группа остаётся нетронутой как контроль, а reward feedback позволяет моду откатить срез, навредивший игроку с высоким спросом.
7. Он действует осторожно и в правильном потоке
- World-thread affinity: любое чтение или запись chunk stores, chunk trackers или view radius выполняется в потоке владеющего world. Фоновый scheduler только оркеструет.
- Probe gate: unload чанков выключен, пока одноразовый probe возможностей (
/leancore probe) не подтвердит, что хуки engine работают. - Ограниченные sweeps: unload ограничен за проход, так что он никогда не уходит в серию сбросов.
- Проверка видимости: освобождает только чанки, которые ни один tracker игрока сейчас не видит.
- Срезать до сброса и откатить: под нагрузкой он срезает view distance до выгрузки и откатывает изменение, когда история tier показывает, что оно навредило.
Профили runtime
LeanCore масштабируется под хост автоматически, по числу игроков, без ручного переключателя:
| Профиль | Когда | Tick | Что работает |
|---|---|---|---|
| LITE | соло встроенный мир | 30s (60s idle) | лёгкий губернатор, адаптивный view, AFK reclaim, demand learning |
| STANDARD | несколько друзей | 15s | добавляет Activity Sense, опциональные губернатор и learning |
| FULL | выделенный сервер | 5s | полный набор, включая policy bandit и holdout |
Чего он намеренно не делает
- Не трогает FPS, GPU и производительность рендера клиента. Только heap сервера.
- Не меняет TPS и поведение симуляции.
- Не выгружает чанк, который видит игрок, и не действует агрессивно, пока heap в COMFORT.
- Без сюрпризов в дефолтах: соло консервативно, а кинематографичный буст opt-in.
Возможности
- Профили runtime:
LITEсоло,STANDARDдрузья,FULLdedicated (localHostMode: AUTO) - LITE губернатор в соло: адаптивный view, понижение зон, AFK unload, demand learning; tick 30s (60s в idle)
- Tiers heap: COMFORT, WATCH, TIGHT, CRITICAL. Откат, если срез вызвал проблемы.
- Dormancy зон: HOT рядом с игроками. Пустые области переходят WARM, DORMANT, FROZEN по таймерам.
- Предиктивное удержание (1.6): модель движения на игрока смещает unload в сторону от направления игрока; зоны в текущем или прогнозируемом view никогда не становятся кандидатами на unload
- Модель reuse-distance + выживаемости (1.6,
zoneReuseModelEnabled): учится, какие зоны посещаются повторно, и подстраивает пороги dormancy для каждой зоны - Бюджет удержания: общий лимит с весом на игрока по активности
- Срезы view-radius: при давлении heap или чанков (LITE в соло; STANDARD/FULL в multi-player / dedicated)
- Unload чанков: dormant/frozen зоны при нужном tier; probe gate блокирует до успешного
/leancore probe - Данные обучения: окна heap, bandit (STANDARD/FULL), demand model, статистика reuse зон; snapshot v8 gzip (совместим с v7) с prune/TTL
- LITE learning: demand model влияет на срезы view в соло; без bandit и holdout в LITE
- Activity Sense: онлайн softmax-классификатор (MINER, LUMBERJACK, FARMER, BUILDER, FIGHTER, EXPLORER)
- Session savings:
/leancore savingsпоказывает heap JVM и активность lite или standard губернатора - Probe gate: unload LITE и STANDARD/FULL заблокирован до
/leancore probe, если gate включён - Dedicated bootstrap: одноразовый preset при первом dedicated boot
- Кинематографичный буст view (1.6,
motionViewRadiusBoostEnabled, opt-in): плавно поднимает дистанцию обзора для быстро движущихся. Выключен по умолчанию, так как перезапись view radius каждый tick вызывает churn чанков в текущем engine. - Диагностика всегда включена (
diagnosticLogEnabled): сводки старта/остановки и логи решений[diag]объясняют, что сделал мод и почему, прямо из лога сервера - Admin HUD (
/leancore hud on): overlay heap/tier. По умолчанию выключен. - Heatmap, zone pin, опциональный CRITICAL webhook
Установка
- Скачайте LeanCore-1.7.0.jar на вкладке Files CurseForge
- Положите JAR в папку mods/ сервера (или
%AppData%\Hytale\UserData\Mods\в Windows) - Запустите сервер. Конфиг: mods/durkz_LeanCore/LeanCore.json
- Выполните
/leancore probe, если нужен unload чанков - Выполните
/leancore statusпосле минуты работы
Команды
Основная команда: /leancore
/leancore status
/leancore memory
/leancore savings
/leancore zones
/leancore learn
/leancore learn player
/leancore probe
/leancore hud on|off|status
/leancore heatmap [limit]
/leancore zone pin|unpin|pins
Команды админа, права и полный конфиг: документация
Конфиг
Файл: mods/durkz_LeanCore/LeanCore.json
Ключевые параметры: localHostMode, liteMemoryGovernorEnabled, liteViewRadiusEnabled, liteUnloadEnabled, liteLearningEnabled, motionModelEnabled, zoneReuseModelEnabled, motionViewRadiusBoostEnabled, diagnosticLogEnabled, governEnabled, learningEnabled, unloadEnabled, unloadProbeGateEnabled, embeddedStandardProfile, dedicatedServerMode.
Снимок learning: mods/durkz_LeanCore/learning.state.gz (schema v8, gzip; v7 мигрирует при первом flush).
Права
- HUD: группы в
hudViewerGroupsи/илиdurkz.leancore.hud - Admin heatmap, zone pin:
hudAdminGroupsи/илиdurkz.leancore.admin
Рекомендации
- Соло / локально:
localHostMode: AUTO(по умолчанию). LITE губернатор и learning включены по умолчанию. - Dedicated или друзья: включите
governEnabled,learningEnabledиunloadEnabledпо необходимости; выполните/leancore probeперед policy unload. - В логе boot должно быть
profile=LITEв соло иLITE -> STANDARD, когда заходит друг.
Лицензия
MIT License
For server owners
Need permissions, commands & config?
The full administration guide covers every permission node, admin command, LuckPerms examples, and all config options.
Read server documentation