Если сервер лагает из-за слишком большого числа сущностей, решение почти никогда не в плагине, который каждые несколько минут удаляет всё, что лежит на земле. Выпавшие предметы и так исчезают через пять минут (6000 тиков). Paper и Spigot позволяют сильнее их объединять, быстрее удалять мусорные предметы, ограничивать то, что сохраняет чанк, и не давать стрелам и сферам опыта копиться - и всё это без вмешательства в то, что игрок вот-вот подберёт. Найдите, какой тип сущностей растёт, с помощью /paper entity list, исправьте ферму или конструкцию, которая его производит, и оставьте таймеры в духе ClearLag как крайнюю меру для публичных серверов, где невозможно поговорить с каждым строителем. Очистка по таймеру прячет причину и удаляет вещи игроков, а это обходится вам в доверии дороже, чем экономит в тиках.
Это третье руководство из серии о сущностях. Жители и мобофермы разобраны в статье Лаги от жителей и мобоферм; редстоун и воронки - в статье Лаги от редстоуна и лимиты. Здесь речь о сущностях, которые никто не создавал специально: предметах, опыте, снарядах и отходах ферм.
Что считается сущностью и какие из них дорогие#
Всё в мире Minecraft, что не является блоком, - сущность: игроки, мобы, выпавшие предметы, сферы опыта, стрелы, вагонетки, лодки, стойки для брони, рамки, падающий песок, подожжённый TNT, display-сущности. Стоят они по-разному.
| Тип сущности | Тикает? | Типичная стоимость | Обычный источник избытка |
|---|---|---|---|
| Выпавшие предметы | Да | Низкая каждая, высокая тысячами | Фермы без сбора, смерти, дроп с мобов |
| Сферы опыта | Да | Низкая каждая | Гриндеры мобов, плавка, разведение |
| Стрелы и трезубцы | Да | Низкая | Фермы скелетов, PvP, раздатчики |
| Враждебные и мирные мобы | Да, с ИИ | От средней до высокой | Фермы, загоны, спавнеры |
| Вагонетки и лодки | Да | Средняя | Заброшенные железные дороги, транспорт мобов |
| Стойки для брони | Да, по умолчанию | От низкой до средней | Декор, плагины голограмм |
| Рамки | Почти нет | В основном нагрузка на клиент | Стены хранилищ, карты |
| Падающие блоки и TNT | Да | Высокая, пока активны | Фермы песка, TNT-машины |
В этой таблице важны две вещи. Во-первых, дешёвые сущности становятся дорогими за счёт количества: один предмет - ничто, а восемь тысяч предметов в чанке под сломанной фермой - это сервер, который замирает каждый раз, когда кто-то проходит рядом. Во-вторых, часть затрат на сущности ложится на клиент и сеть, а не на тик сервера. Тысячи рамок и стоек для брони роняют FPS у игроков и раздувают пакеты чанков задолго до того, как это проявится в /mspt.
Найдите, что на самом деле копится#
Измеряйте, прежде чем что-то настраивать.
/paper entity list/paper entity list minecraft:item/paper entity list minecraft:experience_orb/execute if entity @e[type=minecraft:item]/paper entity list без типа даёт количество по каждому типу сущностей в загруженных чанках; с типом - список чанков, где их больше всего, с координатами. Так «на сервере слишком много сущностей» превращается в «в одном чанке на x: -310, z: 2290 лежит 4100 предметов», а это ферма со сломанной системой сбора и владелец, которому можно написать.
Проверяйте в разное время. Скопления сущностей локальны и существуют только в загруженных чанках, поэтому подсчёт в 4 утра ничего не говорит о базе, которая загружена в 8 вечера. Если хотите следить за тенденцией, делайте подсчёт каждый вечер в одно и то же время и записывайте результат - простого лога в канале персонала достаточно.
Затем подтвердите стоимость профилем. Если spark показывает, что тик сущностей мал по сравнению с загрузкой чанков или плагином, число сущностей - симптом чего-то другого или просто не проблема. Куда смотреть, показано в статье Как читать отчёт spark.
Настройки исчезновения и слияния, которые делают работу#
Большая часть нужной вам очистки сущностей уже встроена в Paper и Spigot. Её просто не настроили.
merge-radius: item: 2.5 exp: 3.0item-despawn-rate: 6000arrow-despawn-rate: 1200trident-despawn-rate: 1200Это значения по умолчанию. Что делает каждое и что стоит менять:
merge-radius.itemопределяет, насколько близко должны лежать одинаковые предметы, чтобы объединиться в одну сущность-стопку. Поднятие до3.5или4.0заметно сокращает число предметов под фермами. Предметы визуально стягиваются друг к другу с чуть большего расстояния, и это никому не мешает.merge-radius.expделает то же самое для сфер опыта. Современные версии и так объединяют сферы одинакового номинала, поэтому эффект от увеличения меньше, чем раньше, но под гриндерами это всё ещё помогает.item-despawn-rateзадаётся в тиках:6000- это ванильные пять минут. Снизить его глобально - грубая версия ClearLag, и бьёт она по игроку, чья куча вещей после смерти лежит в двух блоках. Используйте вместо этого настройку для отдельных предметов ниже.arrow-despawn-rateиtrident-despawn-rateпо умолчанию равны1200тикам (одна минута) для снарядов, застрявших в блоках. Снизить для стрел до300безвредно, это очищает фермы скелетов и стрельбища. Трезубцы не трогайте: игрок, бросивший трезубец, хочет его вернуть.
Paper добавляет более тонкое управление в config/paper-world-defaults.yml:
entities: spawning: alt-item-despawn-rate: enabled: true items: cobblestone: 300 netherrack: 300 rotten_flesh: 600 bamboo: 600alt-item-despawn-rate - правильный инструмент для мусора. Булыжник после похода в шахту и незерак после прокладки туннеля исчезают через пятнадцать секунд вместо пяти минут; всё остальное живёт по ванильному таймеру, так что выпавшая алмазная кирка остаётся нетронутой. Составляйте список по тому, что на самом деле появляется в /paper entity list minecraft:item на вашем сервере, а не копируйте чужой - мусор фермерского сервера отличается от мусора шахтёрского.
Другие настройки Paper в том же файле, о которых стоит знать:
entities.spawning.non-player-arrow-despawn-rateиcreative-arrow-despawn-rateускоряют исчезновение стрел от скелетов, раздатчиков и игроков в творческом режиме. Обе по умолчанию равныdefault, то есть берут значение из Spigot.entities.armor-stands.tick: trueопределяет, тикают ли стойки для брони. Значениеfalseэкономит работу на серверах с тысячами декоративных стоек; оно ломает стойки, которым нужна физика или которые двигает плагин, так что сначала проверьте.entities.armor-stands.do-collision-entity-lookups: trueможно выставить вfalse, чтобы стойки не проверяли коллизии, - небольшая экономия на серверах с обилием декора.entities.spawning.despawn-rangesзадаёт мягкую и жёсткую дистанции исчезновения мобов, от которых зависит, как быстро ненужные мобы пропадают, когда игроки уходят.
Ключи переезжают между версиями Paper. Откройте файл, который сгенерировал ваш сервер, и ищите имя ключа, а не вставляйте блок из руководства, включая это.
Лимиты сохранения на чанк: защита от бомб из сущностей#
Иногда проблема не в тике, а в загрузке. Чанк, в котором, пока он был выгружен, накопились десять тысяч сфер опыта или стрел, или чанк, который кто-то намеренно забил сущностями, замораживает сервер при каждой загрузке. В Paper есть защита от этого:
chunks: entity-per-chunk-save-limit: arrow: 100 experience_orb: 100 snowball: 50 ender_pearl: 20 fireball: 20 small_fireball: 20По умолчанию каждая запись равна -1, то есть без ограничений. Если лимит задан, чанк сохраняет только столько сущностей этого типа; остальные отбрасываются при выгрузке чанка. Для снарядов и сфер опыта это совершенно безопасно и закрывает известный способ уронить сервер чанками, набитыми сущностями.
Не используйте это как общий лимит на предметы или животных. Излишек молча удаляется при сохранении, и игрок, у которого пропали коровы или куча вещей из разбитого сундука, никак не сможет узнать почему. Для предметов и животных исправляйте источник и устанавливайте правила, которые игроки видят.
Ручная очистка, которая никому не вредит#
Бывают моменты, когда сущности нужно убрать прямо сейчас: ферма сломалась за ночь и засыпала чанк предметами, или грифер заспавнил сотни мобов. Ванильные селекторы достаточно точны, чтобы сделать это безопасно.
/kill @e[type=minecraft:item,distance=..64]/kill @e[type=minecraft:experience_orb]/kill @e[type=minecraft:arrow]/kill @e[type=minecraft:item,nbt={Item:{id:"minecraft:cobblestone"}}]/kill @e[type=minecraft:zombie,distance=..100]Команды с ограничением по области запускайте с нужного места - встаньте там в игре или оберните их в /execute positioned <x> <y> <z> run ... из консоли. Фильтр distance=..64 означает «в пределах 64 блоков от места выполнения команды»; из консоли без позиции расстояние отсчитывается от точки спавна мира, а это редко то, что нужно. Фильтр NBT для предметов зависит от версии (в 1.20.5 NBT предметов сменился на компоненты), поэтому сначала проверьте его на одном предмете.
Предупредите игроков заранее. Сообщение в чате и минута ожидания ничего не стоят и спасают того единственного человека, чья куча вещей после смерти оказалась в радиусе. Префикс /minecraft: стоит использовать, если плагины подменяют /kill своей версией.
ClearLag и очистка по таймеру#
ClearLag - самый известный плагин для удаления сущностей. Он работает по таймеру, рассылает предупреждения, удаляет настроенные типы сущностей и предлагает команды вроде /lagg clear для немедленного удаления сущностей, /lagg check для подсчёта и /lagg killmobs для удаления мобов. Он существует давно, и разработка шла с перерывами, поэтому прежде чем на него полагаться, проверьте, что скачанная сборка поддерживает вашу версию Minecraft.
Что он делает хорошо:
- На большом публичном сервере, где невозможно проверить каждую ферму, очистка предметов на земле по таймеру с видимым обратным отсчётом ставит потолок для худшего случая.
- Его команды подсчёта - быстрый способ увидеть общие цифры.
Что он делает плохо:
- Он убирает симптом. Ферма продолжает производить; плагин продолжает удалять. Стоимость производства предметов в тиках никуда не девается.
- Он удаляет вещи. Кучи после смерти, предметы, выложенные для обмена, шалкер, который кто-то поставил на секунду. Обратный отсчёт помогает, но не игроку, который в этот момент отошёл.
- Он поощряет плохие постройки. Если землю очищают каждые пять минут, никому не нужно строить системы сбора, и их не строят.
- Функции, которые звучат полезно, часто таковыми не являются. Всё, что рекламируется как освобождение памяти через вызов сборщика мусора Java, на современной JVM ничего полезного не делает и может вызвать паузу. Память и число сущностей - разные проблемы; см. статью Сколько RAM нужно серверу Minecraft.
Если всё же используете очистку по таймеру, ограничьте её мусорными типами предметов, исключите именованные предметы и всё из списка ценного, держите интервал длинным (десять минут и больше), а предупреждения - понятными. На закрытом сервере для друзей с белым списком не используйте её вовсе: вы можете просто поговорить с человеком, у которого переполняется ферма.
Плагины-стакеры (распространённый вариант - RoseStacker) подходят к делу иначе: они объединяют множество мобов или предметов в одну сущность со счётчиком. Это резко сокращает число сущностей и меняет поведение ферм и дропа с мобов, так что это в той же мере игровое решение, что и решение о производительности.
Исправление источника#
За каждой проблемой с сущностями стоит строитель. Исправления редко бывают сложными.
- Сбор под каждой фермой. Водяные потоки к нескольким воронкам или линия воронок, ведущие в хранилище. Ферма, которая сбрасывает добычу на землю, не закончена.
- Обработка переполнения. Когда хранилище заполняется, предметы скапливаются и вываливаются. Строители должны добавить переполнение, которое либо останавливает ферму, либо уничтожает излишек в мусорке из лавы или кактуса - намеренная утилизация дешевле кучи.
- Камеры убийства, которые убивают. Гриндер, оставляющий мобов живыми в зоне ожидания, - это загон с ИИ. Убивайте быстро, собирайте сразу.
- Никакого неиспользуемого транспорта. Заброшенные цепочки вагонеток и лодки с мобами продолжают тикать. Убирайте их, когда проект закончен.
- Декор в меру. Хранилище с тремя сотнями рамок - проблема с FPS на клиенте у каждого, кто туда заходит, даже если серверу всё равно.
Запишите это как правила сервера и свяжите с лимитами на базу из ваших правил для жителей и редстоуна. Как заставить правила работать, рассказывает статья Правила, модерация и персонал.
На RE:NODE команды подсчёта и безопасные формы /kill можно запускать прямо из консоли панели, с нефильтрованным выводом, а потом смотреть, как успокаиваются графики памяти и CPU. Перед любой массовой очисткой сделайте backup из панели - это одна кнопка, копия хранится вне машины, и опечатка в селекторе - ровно тот случай, для которого он нужен. Почему один из backup стоит проверить, объясняет статья Backup, которые действительно восстанавливаются.
FAQ#
Сколько живут выпавшие предметы в Minecraft?
Пять минут, то есть 6000 тиков, если это не изменено через item-despawn-rate в spigot.yml или через alt-item-despawn-rate в Paper для отдельных предметов. Предметы в выгруженных чанках не стареют, поэтому куча в чанке, который никто не посещает, ждёт, пока кто-нибудь придёт.
ClearLag вредит серверу?
Не вредит, но действует грубо. Он сокращает число сущностей, удаляя вещи, а это прячет ферму или конструкцию, которая их порождает, и иногда удаляет то, что было нужно игроку. Сначала настройте слияние и исчезновение в Paper, а ClearLag используйте только там, где невозможно исправлять источники по одному.
Как безопаснее всего удалить все выпавшие предметы?
/kill @e[type=minecraft:item], желательно с ограничением по расстоянию и после предупреждения. Никогда не используйте /kill @e без фильтра по типу, потому что так удаляются ещё и игроки, питомцы, жители, рамки и стойки для брони.
Вызывают ли лаги рамки и стойки для брони?
Стойки для брони по умолчанию тикают и стоят понемногу каждая; Paper может это отключить. Рамки почти не тикают, но нагружают клиент и сеть, поэтому комната, полная рамок, бьёт по FPS игроков сильнее, чем по тику сервера.
Почему сервер замирает, когда кто-то подходит к одной базе?
Загружается чанк с огромным количеством сущностей - часто это предметы или сферы опыта, накопившиеся под фермой. Проверьте /paper entity list, пока игрок там, затем задайте entity-per-chunk-save-limit для снарядов и сфер опыта и исправьте сбор на ферме.




Комментарии
Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.