← Back to home

LeanCore

Active

Hytale • Version 1.7.0

сервер память ram губернатор бездействие производительность админ обучение соло co-op

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 мод управления памятью сервера

С 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 друзья, FULL dedicated (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

Установка

  1. Скачайте LeanCore-1.7.0.jar на вкладке Files CurseForge
  2. Положите JAR в папку mods/ сервера (или %AppData%\Hytale\UserData\Mods\ в Windows)
  3. Запустите сервер. Конфиг: mods/durkz_LeanCore/LeanCore.json
  4. Выполните /leancore probe, если нужен unload чанков
  5. Выполните /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