• Форум обновился. Для восстановления группы "гражданин", зайдите на сервер и введите команду /fc link. Внимание, команда обновилась!

Немного о производительности сервера Minecraft

milovidoff

Известный пользователь
Сообщения
112
Реакции
99
Баллы
28
Имя
Александр
1/3
Thread owner
Я недавно играю на этом сервере, и вижу, что сервер хороший, сообщество приятное, только иногда все страдают от нехватки производительности. Лаги, просадка ТПС и прочие спецэффекты, которые уже можно отнести к разряду погодных явлений в мире Гамма. И я решил попробовать провести небольшое исследование на эту тему. Мне, как инженеру, всегда было интересно, как приложение утилизирует эти гигагерцы и гигабайты памяти. Учитывая, что у нас в кровавом энтерпрайзе приложения на Java - довольно частое явление, я подумал, что возможно, мой опыт их эксплуатации немного поможет в этом. Единственное, что я никогда не запускал сервер Minecraft, но это было легко исправить.

До того, как я начал его запускать, у меня был какой-то набор иллюзий по поводу его масштабируемости. В голове рисовалась стройная картина серверного приложения, которе можно распараллелить на n инстансов (возможно, даже в контейнерах), каждый из которых будет обслуживать к примеру 1-10 пользователей, и работать с одним хранилищем мира, которое, к примеру, находится в базе данных. Однако, реальность оказалась несколько более прозаичной. После того, как я поднял сервер PaperMC, я обнаружил, что он хранит данные мира в файлах. И я не знаю, могут ли несколько инстансов сервера работать с ними, не мешая друг другу. Нужно читать документацию и изучать передовой опыт (работают же как-то сервера на 1000+ пользователей? или такого не бывает?)

За рамками данного исследования осталось - как PaperMC распараллеливает треды по процессорным ядрам. Так или иначе, мне показалось, что единственный разумный способ как-то распилить этот монолит на части - сделать так, чтобы каждый мир обрабатывался отдельным сервером (желательно, на отдельной железке).

И наконец, немного поэкспериментировав с сервером на хостинге, я понял, что не знаю, как собирать с него метрики производительности. Локально, если бы у меня была возможность, я бы собирал метрики через JMX при помощи Telegraf, отправлял в InfluxDB, и просматривал в Grafana (в общем, всё как на любимой работе). Однако на этом хостинге я не могу запускать на сервере каких-то дополнительных приложений. И поиском я случайно нашёл плагин для сервера - Minecraft Prometheus Exporter (линк на github), который позволяет собирать метрики в Prometheus, и затем просматривать их в красивом виде в той же Grafana. Единственное, что я никогда не видел Prometheus, и для него понадобится отдельный сервер. Но это не преграды для инженера.

Для этого эксперимента я создал виртуальную машину в одном облаке. Установил на ней Prometheus и Grafana, немного повозился - и в результате сервер подключился к плагину Prometheus Exporter на сервере Minecraft, и собирает оттуда метрики по использованию памяти, tps, количеству мобов, загруженных чанков и т.д.

В Grafana, после импорта Dashboard от разработчика плагина, это выглядит так:

1610655146074.webp

Выглядит достаточно неплохо - серверу выделен 1 Гб памяти, играет на нём 1 человек, и как-то всё это на нём помещается.
Интересно, как бы это выглядело на боевом сервере, и можно ли из этого извлечь какую-то пользу в плане понимания, чем он тормозит в данный конкретный момент времени.
 
работают же как-то сервера на 1000+ пользователей? или такого не бывает?
В 12-13 годах играл на сервере с онлайном 200+ человек. Но там сервер был полностью переписан и никакой связи с официальным minecraft не имел. Этот сервер разработчики сами обновляли, придумывая свои "фишки". Ведь официальные обновления уже не вставали на него. И пошло ответвление в другой minecraft. Но всё же было интересно.
 
Thread owner
Мне кажется, в ситуации с FC нужно собирать метрики в привязке к каждому пользователю. Там точно есть метрики (player metrics - experimental) по взаимодействию каждого игрока с блоками, мобами, использование предметов, и т.д. Но не уверен, что можно собирать метрики о мобах и механизмах, которые просто активировались рядом с игроком (в том числе есть ли возможность доработки плагина, чтобы собирать эти метрики).
 
Я без метрик скажу. Уже об этом много раз писал.
У майна есть стандартное число тиков - 20. TPS - тики в секунду. Для нормальной работы нужно 20 тиков в секунду.
Что "нагружает тики"? Воронки раз в тик совершают некую операцию проверки своего состояния (даже если там ничего нет). Теперь промасштабируем это на кучу воронок, на кучу игроков, на все фермы и т.д.
Всё что движется - мобы, стойки (да они тикают) и прочее - всё потребляет эти тики. Соответственно при больших количествах всех сущностей (в том числе поршни, воронки и подобные "неживые" предметы) начинается просадка т.к. мощности машины (или тут в частности сама java) не хватает.
Я экспериментировал со многими конфигурациями и всегда прихожу к тому, что написал выше. Даже на диком железе оно всё равно улетит в зависоны. Особенно ярко это чувствовалось когда у нас не было ограничения мобов на чанк.
Если пользоваться всякими замедлителями, очистителями и прочим - это частично решает проблему (как минимум с мобами), но если сделать также с воронками, они сразу перестают нормально функционировать.
Я не настраивал ничего такого на самой java т.к. это может привести к странным последствиям, считаю что лучше каждый день рестартить сервер и соответственно очищать всё.
 
Воронки раз в тик совершают некую операцию проверки своего состояния (даже если там ничего нет).
О_О
Т.е. любая установленная в мир воронка тянет ресурсы сервера одинаково? Независимо от того, передаёт что-то сейчас или нет?
 
Ну скорее всего пустая будет чуть меньше потреблять. Если так подумать, ей только нужно проверять есть ли что на вход. Полным же нужно смотреть на ресурсы, количество и прочее.
 
Однако... Вот и лаг-машинист один нашёлся, похоже. Тыкал воронки не жалея, т.к. активируются они у меня редко, думал что в другое время это просто блоки. Похоже, придётся мне систему хранения барахла у ферм поужать.
С другой стороны, при возвращении домой ТПС вроде заметно не проседал.
 
Если не проседал - не очень критично. Думаю они минимально нагружают когда ничего не делают.
В основном на фермах рыбок, в рабочем состоянии, они могут быть опасны.
 
У меня там фермы тростника и тыкв, активируются они по таймеру пару раз в игровые сутки, а потом выпавший дроп воронки раскидывают по нескольким десяткам сундуков.
 
Накрытые контейнерами (сундуками, воронками, компостерами, так далее) воронки гораздо меньше напрягают сервер, потому что отключается поиск обьектов для всасывания

Но при этом воронка еще будет проверять каждую ячейку контейнера. Поэтому если воронка не должна принимать ничего сверху, а только сбоку, идеальное решение накрыть ее компостером - там всего 1 ячейка для проверки =)

Кроме того неактивные воронки можно отключать. Неплохую реализацию этой механики можно посмотреть на ферме железа Juster (Mega Steven), на системе сбора лута. Там почти все воронки по умолчанию заблокированы, включаются когда в верхние поступает лут. Правда, система тогда немного странно пропускает лут, но работает)
 
Ну а так да, еще очень важно освещать свою територию, потому что мобы - злее воронок =)
 
В основном на фермах рыбок, в рабочем состоянии, они могут быть опасны.
Если Вы, имеете ввиду, ферму стражей в Дельте, то никакой просадки тпс, при нахождение на данной ферме, не наблюдалось! В данный момент, онлайн на сервере 9 человек, тпс 19.9! Ферма строилась в те времена, когда на сервере играло одновременно 20-25 человек! Никто не жаловался! Ферма работает за счёт водных потоков, количество воронок минимально! Стоят там лишь для сортировки лута!
 
Однако... Вот и лаг-машинист один нашёлся, похоже. Тыкал воронки не жалея, т.к. активируются они у меня редко, думал что в другое время это просто блоки. Похоже, придётся мне систему хранения барахла у ферм поужать.
С другой стороны, при возвращении домой ТПС вроде заметно не проседал.

Я тебе больше скажу, есть такой вид гриферства - наставляют огромнейшее количество контейнеров, часто используют печки (в астрономических количествах), так как они дешевле и быстрее воронок, и всё это приводит к вылетам и просадкам тпс
 
При проседании ТПС до 10 и меньше тепать на спавн по одному игроку и будет видно после кого значительно добавилось TПС. Далее смотреть что у него построено. На всех своих лично фермах я проверял, тепался на спавн, тпс не менялся.
 
При проседании ТПС до 10 и меньше тепать на спавн по одному игроку и будет видно после кого значительно добавилось TПС. Далее смотреть что у него построено.
Насколько я понимаю, чанки после ухода игрока выгружаются не сразу, так что такого тепнутого надо будет в тюрячку сажать минут на 10, чтобы сразу домой не вернулся. Ну и другим приказать не бродить особо в это время, чтобы что-то другое не прогрузили.
Кстати, а отключённая сигналом редстоуна воронка ресурсы всё ещё жрёт? А сам редстоун, всякие повторители, провода и компараторы?
 
Thread owner
Кстати, когда ТПС уже просажен, в момент автоматического сохранении мира просадка чувствуется особенно. Возможно, стоит посмотреть на дисковую подсистему.
Да, и если сервер не железный, а виртуальный - все соседние виртуальные машины могут влиять на производительность. Также различные долго идущие процессы типа бэкапов всей системы могут портить картину.

В общем, я почитал и понял - как обычно, всё сводится к покупке или аренде новой железки. А лучше ещё трёх, чтобы разнести миры по ним. Но можно пойти дальше административными методами и например разрешить строить высокопроизводительные фермы только в отдельном мире, который будет работать на выделенном сервере, перенести туда имеющиеся фермы, и т.д.
 
Вопрос к знатокам… хочу переделать ферму цветов. Есть два варианта распихивания костной муки по раздатчикам - через кучку воронок - либо через выбрасыватели, как лучше сделать, чтобы не грузить сервер?
Воронки будут в любом случае, но их количество хочу свести к минимуму.
А вообще выбрасыватели сильно грузят сервер?
 
Делай по возможности через водные пути - не ошибешься. Проблема не только в нагрузке на сервер, но и в том, что механизмы на том и другом подглючивают в последнее время в Дельте.
 
Делай по возможности через водные пути - не ошибешься. Проблема не только в нагрузке на сервер, но и в том, что механизмы на том и другом подглючивают в последнее время в Дель
Делай по возможности через водные пути - не ошибешься. Проблема не только в нагрузке на сервер, но и в том, что механизмы на том и другом подглючивают в последнее время в Дельте.
Короче буду пробовать, а там увидим
 
Назад
Сверху