Как оптимизировать майнкрафт


Как повысить FPS в Minecraft и устранить лаги? Детальный гайд.

На первый взгляд Minecraft может показаться нетребовательной игрой с довольно простой графикой. Но иногда даже владельцы мощных ПК сталкиваются с низкими показателями FPS. Чтобы устранить эту проблему, необходимо для начала определить, почему Майнкрафт лагает. В некоторых случаях для повышения производительности достаточно всего несколько простых действий. Заметно повысить FPS могут даже владельцы слабых компьютеров, но им для этого придется прибегнуть к максимальной оптимизации.

  1. Установка и настройка Optifine.
  2. Использование модов для повышения FPS.
  3. Обновление Java и выделение памяти.
  4. Установка оптимизированных ресурспаков.

Возможно, выполнение всего одного пункта позволит тебе играть в Minecraft с достаточным уровнем комфорта.

Установка и настройка Optifine

Настройки графики в стандартном Minecraft довольно ограничены, с их помощью ты сможешь изменять лишь базовые параметры. Провести более тонкую настройку поможет замечательный мод Optifine, который можно установить практически на любую версию игры.

Даже без изменения настроек Optifine зачастую увеличивает количество FPS в Minecraft в 2 раза.

После установки этого мода ты, скорее всего, заметишь значительное улучшение производительности. Если же его будет недостаточно, то всегда можно заняться тонкой настройкой. Проще всего переключить качество графики с «Детально» на «Быстро», а также уменьшить до низких значений дальность прорисовки.

Для владельцев слабых видеокарт очень полезно будет минимизировать или даже вовсе убрать сглаживание. Это можно сделать в разделе «Качество». В Майнкрафте этот параметр имеет не настолько большое влияние на качество картинки, как в большинстве других игр.

Optifine также позволяет детально настроить отображение и анимацию большинства элементов игры. Ты можешь отключить то, что для тебя не имеет большого значения. Всегда полезно убирать тени, иногда это может добавить 15-20 FPS.

Так же Optifine добавляет раздел настроек «Производительность». В нем лучше активировать все пункты, все они могут положительно повлиять на оптимизацию.

Моды для повышения FPS

Многие процессы и функции в Майнкрафте не оптимизированы, что позволяет сторонним разработчикам создавать моды, при помощи которых можно поднимать FPS. Некоторые из них хороши для ванильной версии, другие помогут тебе уменьшить количество лагов в больших сборках. Мы предлагаем список наиболее эффективных и простых в установке модификаций:

  1. VanillaFix. Главной целью этого мода является устранение вылетов, однако в некоторых случаях он также заметно повышает ФПС. При большинстве критических ошибок игра не закроется, а лишь вернется к главному меню, что порадует любителей играть с большим количеством модов.
  2. Better FPS. Мод, стабильно повышающий количество кадров даже на любых системах. Будет полезен ПвП-игрокам.
  3. TexFix. Хороший оптимизатор текстур, позволяет использовать HD-паки даже на относительно слабых ПК. Может выручить в том случае, если Майнкрафт плохо работает из-за небольшого объема оперативной памяти.
  4. Phosphor. Полезный мод, оптимизирующий освещение. В ванильной версии его результаты не очень заметны, но некоторые глобальные моды будут работать с ним в разы быстрее.
  5. FoamFix. Решение для обладателей ПК с небольшим количеством оперативной памяти.

Для максимальной эффективности ты можешь использовать сразу несколько модов. Кроме того, все они полностью совместимы с Optifine.

Обновление Java и выделение памяти

Minecraft работает по технологиям Java и потребляет не всю оперативную память, а лишь тот объем, который задан в настройках. Иногда его оказывается недостаточно, особенно если играть с большим количеством модов. Если ты играешь в Майнкрафт через лаунчеры, то изменить выделяемый объем памяти очень просто. Достаточно зайти в настройки и переместить соответствующий ползунок. Для примера скриншот из TLauncher.

Настроить выделение памяти без лаунчера можно и через панель инструментов. Для этого выполни такую последовательность действий:

  1. Нажми Windows+R на клавиатуре.
  2. В открывшемся окошке введи control.
  3. В открывшемся окне выбери пункт Java.

После этого откроется панель настроек, на которой тебе нужно перейти во вкладку Java и нажать кнопку View.

В появившемся окне можно задать выделение памяти на свое усмотрение. Это делается в столбце Runtime Parameters. В зависимости от количества ОЗУ на твоем компьютере, рекомендуется указывать такие параметры:

  • 2 Гб оперативной памяти: -Xms1024m -Xmx1024m
  • 4 Гб: -Xms2048m -Xmx2048m
  • 6 Гб: -Xms3072m -Xmx3072m
  • 8 Гб: -Xms4096m -Xmx4096m

Выделяя память для Java, оставляй свободными не менее 1 Гб, иначе появится шанс зависания Windows или вылетов игры.

Если на твоем ПК установлено более 4 Гб оперативной памяти, то лучше скачать 64-битную версию Java. Её всегда можно найти на официальном сайте.

Установка оптимизированных ресурспаков

Заменяя стандартные текстуры, ты можешь добиться заметного уменьшения количества лагов.. Ты можешь выбрать оптимизированный текстурпак или ресурспак для буста ФПС, который не только увеличит производительность, но и улучшит графику в игре. Как правило, лучше всего повышают производительность текстуры для PvP.

Для использования ресурспаков и текстурпаков в Майнкрафт тебе предварительно нужно будет установить Optifine. Поскольку этот мод сам по себе повышает FPS, ты сможешь повысить производительность более чем в два раза.

Оптимизация сервера Minecraft / Блог компании Selectel / Хабр


В нашем блоге мы уже рассказывали, как создать свой сервер Minecraft, однако с тех пор прошло 5 лет и многое поменялось. Делимся с вами актуальными способами создания и оптимизации серверной части столь популярной игры.

За свою 9-летнюю историю (если считать от даты релиза) Minecraft заработал потрясающее количество поклонников и хейтеров как среди обычных игроков, так и среди гиков. Простая концепция мира из кубиков превратилась из обычного развлечения в универсальную среду для общения и создания различных объектов из реального мира.

Помимо строительства, в игре есть возможность создавать логические схемы, которые позволяют реализовывать полноценные алгоритмы внутри Minecraft. На YouTube полно весьма впечатляющих роликов, где люди, приложив огромное количество сил и потратив множество времени, создали копию того или иного электронного устройства или построили детальную копию существующих и вымышленных архитектурных сооружений. Все ограничивается лишь фантазией геймера и возможностями игровой вселенной.


Но не будем дальше говорить о том, что именно игроки создают, а посмотрим на серверную часть приложения и осветим проблемы (порой весьма сложные), которые могут возникнуть в процессе работы под нагрузкой. Сразу оговоримся, что речь пойдет только о Java Edition.

Виды серверов


Самым простым вариантом является сервер, встроенный в клиент игры. Создали мир, нажали на одну кнопочку, и вот сервер стал доступен по локальной сети. Никакой серьезной нагрузки такой вариант выдержать не может, а поэтому мы не будем его даже рассматривать.

Vanilla


Компания Mojang Studios распространяет серверную часть игры в виде Java-приложения бесплатно на официальном сайте. Это позволяет создать свой собственный выделенный сервер и персональный мир, сделав его доступным для подключения из любой точки планеты. Для тех, кто делает это впервые, есть отличный туториал, доступный в соответствующей игровой Wiki.

У этого подхода есть один серьезный недостаток, а именно — отсутствие возможностей «из коробки» подключать плагины, расширяющие функционал сервера и позволяющие не только автоматизировать многие процессы, но и оптимизировать производительность. Кроме того, у официального сервера достаточно большое потребление оперативной памяти на каждого подключенного игрока.

Bukkit


Созданное энтузиастами на базе Vanilla-версии серверное приложение Bukkit значительно расширяло возможности игры за счет поддержки плагинов и модов (модификаций). Оно позволило не только добавлять в игровой процесс новые блоки, но и выполнять различные манипуляции, недоступные ванильному ПО. Что интересно, памяти это приложение требовало значительно меньше.

Установить Bukkit не составляет особого труда, соответствующая инструкция есть на ресурсе GamePedia. Но это не имеет смысла, так как с 2014 года команда Bukkit распалась, разработчики проекта стали сотрудниками Mojang Studios, а репозиторий заброшен. Таким образом, Bukkit фактически мертв, и имеет смысл обратить внимание на два следующих проекта.

SpigotMC


Для облегчения жизни разработчиков плагинов была необходимость в API для взаимодействия с игровым миром. Именно эту задачу и решили создатели Spigot, взяв за основу ядро Bukkit и переработав его для достижения лучшей надежности и производительности. Тем не менее, Git-репозиторий проекта был заблокирован в связи с Законом об авторском праве в цифровую эпоху (DMCA), и скачать оттуда исходники невозможно.

На текущий момент SpigotMC активно развивается и используется. Он поддерживает все плагины, созданные под Bukkit, однако с ним обратно не совместим. Чтобы обойти запрет DMCA Takedown, был придуман элегантный способ под названием BuildTools. Этот инструмент избавляет от необходимости дистрибуции скомпилированного приложения и позволяет пользователям выполнить компиляцию Spigot, CraftBukkit и Bukkit из исходного кода. Все это делает запрет DMCA бесполезным.

PaperMC


Казалось бы, все круто, и Spigot стал прекрасным вариантом. Но некоторым энтузиастам этого показалось мало, и они запилили свой собственный форк Spigot «на стероидах». На странице проекта ключевым достоинством указано, что “It's stupid fast”. Развитое коммьюнити позволяет оперативно решать возникающие вопросы, а расширенное API — делать интересные плагины. Запустить PaperMC можно одной простой командой, приведенной в документации.

С совместимостью у PaperMC все прекрасно, так что написанные плагины под SpigotMC легко заработают и на PaperMC, но без официальной поддержки. Обратная совместимость со SpigotMC также присутствует. Теперь, когда мы перечислили различные варианты создания сервера, перейдем к тем проблемам производительности, которые могут возникать.

Проблемы и решения


Главное, что нужно понимать, — все, что касается обработки игрового мира будет обрабатываться только на одном вычислительном ядре физического сервера. Так что если вдруг у вас прекрасный сервер с десятком вычислительных ядер, то загружено будет только одно. Все остальные будут фактически простаивать. Такова уж архитектура приложения, и ничего вы с этим поделать не сможете. Так что при выборе сервера следует обращать внимание не на количество ядер, а на тактовую частоту. Чем она будет выше, тем лучше будет производительность.

Что касается вопроса об объеме оперативной памяти, тут следует исходить из следующих показателей:

  • планируемое количество игроков;
  • планируемое количество миров на сервере;
  • размер каждого мира.

Следует помнить, что Java-приложению всегда нужен запас по оперативной памяти. Если вы рассчитываете на потребление памяти в 8 гигабайт, то фактически надо иметь 12. Цифры условные, но суть от этого не меняется.

Для запуска серверной части рекомендуем воспользоваться флагами, указанными в статье Tuning the JVM – G1GC Garbage Collector Flags for Minecraft. Эта «черная магия» позволяет серверу грамотно настроить «сборщик мусора» и оптимизирует использование оперативной памяти. Не стоит выделять памяти больше, чем реально потребляет сервер при пиковом наплыве игроков.

Генерация карты блоков

“Вы действительно считаете, что Луна существует, только когда вы на неё смотрите?” (Альберт Эйнштейн)
Абсолютно новый сервер. Как только игрок первый раз успешно подключается, игровой персонаж появляется на общей точке сбора (спаун). Это единственное место, где игровой мир предварительно генерируется сервером. В этот же момент клиентская часть смотрит в настройки, и ключевым параметром является дальность прорисовки. Измеряется она в чанках (область карты 16x16 и высотой в 256 блоков) Сколько чанков там указано, именно столько и будет запрошено у сервера.

На сервере хранится глобальная карта мира, и если в ней еще нет сгенерированных блоков в точке появления игрового персонажа, то сервер их динамически генерирует и сохраняет у себя. Мало того, что это требует больших вычислительных ресурсов, так еще и постоянно увеличивает размер карты мира. На одном из старейших анархических серверов 2b2t (2builders2tools) размер карты уже превысил 8 Tb, а граница мира проходит на отметке в 30 млн блоков. С этим сервером связаны тысячи историй, и он заслуживает отдельной статьи серии статей.

Генерация мира вокруг одного игрока — не проблема. Генерация мира вокруг сотни игроков вызовет незначительные тормоза сервера на протяжении короткого времени, после чего нагрузка снизится. Генерация мира на дальность прорисовки клиента вокруг тысячи игроков уже способна «уронить» сервер и повыбрасывать с него всех клиентов по таймауту.

В серверном ПО имеется такое значение, как TPS (Ticks per Server — тактов в секунду). Штатно 1 такт равен 50 мс. (1 секунда реального мира равна 20 тактам игрового мира). Если обработка одного такта вырастет до 60 секунд — серверное приложение будет закрыто, выкинув всех игроков.
Выход — ограничить мир определенными координатами и выполнить предварительную генерацию блоков. Тем самым мы снимаем необходимость динамической генерации в процессе игры, и серверу будет достаточно прочитать уже существующую карту. Оба вопроса решаются одним-единственным плагином WorldBorder.

Проще всего задать границу мира в виде окружности относительно точки спауна (хотя можно ее сделать любой формы) одной командой:

/wb set <радиус в блоках> spawn

Если игровой персонаж попытается пересечь границу, то будет отброшен на несколько блоков назад. Если это проделать несколько раз за ограниченное время, то нарушитель будет принудительно телепортирован на точку спауна. Предварительная генерация мира выполняется еще проще, командой:
/wb fill

Поскольку данное действие потенциально может затронуть игроков, находящихся на сервере, не забудьте подтвердить выполнение:
/wb confirm

В общей сложности на то, чтобы сгенерировать мир радиусом в 5000 блоков (~40 млрд блоков) ушло примерно 2 часа на процессоре Intel® Xeon® Gold 6240. Поэтому, если хотите запустить прегенерацию большей карты, учитывайте, что этот процесс займет приличное количество времени, а TPS сервера будет серьезно снижено. Кроме того, помните, что даже радиус в 5000 блоков потребует примерно 2 Гб места на дисковом накопителе.

Несмотря на то, что крайняя версия плагина была разработана для Minecraft версии 1.14, опытным путем выяснено, что она прекрасно работает и на последующих версиях. Полный список команд с пояснениями доступен на форуме плагина.

Проблемные блоки


Разновидностей блоков в Minecraft великое множество. Однако мы бы хотели остановить внимание читателей на таком блоке, как TNT. Как следует из названия, этот блок представляет собой взрывчатку (примечание редакции — это игровой предмет виртуального мира и ничего с настоящими ВВ этот предмет не имеет). Его особенность такова, что в момент активации на него начинает действовать сила гравитации. Это заставляет сервер обсчитать все координаты, если в этот момент блок начинает падать.

Если блоков TNT несколько, то детонация одного блока вызывает детонацию и включение гравитации у соседних блоков, разбрасывая их во все стороны. Вся эта красивая механика на стороне сервера выглядит как множество операций по подсчету траектории каждого из блоков, а также взаимодействия с соседними блоками. Задача крайне ресурсоемкая, что легко может проверить каждый. Сгенерируйте и подорвите куб из блоков TNT, размером хотя бы 30x30x30. И если вы думали, что у вас хороший мощный игровой компьютер, то сильно заблуждались ;)

/fill ~ ~ ~ ~30 ~30 ~30 minecraft:tnt


Подобный «эксперимент» на сервере с Intel® Xeon® Gold 6240 привел к серьезной «просадке» TPS и 80% нагрузке на CPU в течение всего времени детонации блоков. А следовательно, если кто-либо из игроков сможет проделать подобное, то проблема с производительностью затронет всех находящихся на сервере игроков.

Еще более жесткий вариант — Кристаллы Края. Если TNT все же взрывается последовательно, то Кристаллы Края детонируют все одновременно, что в теории может вообще остановить работу серверного приложения.

Избежать этого сценария можно, только полностью запретив использование данных блоков в игровом мире. Например, с помощью плагина WorldGuard. Обратите внимание, что сам по себе этот плагин не работает без другого плагина WorldEdit. Так что устанавливаете вначале WorldEdit, а затем WorldGuard.

Заключение


Грамотное управление игровым сервером — задача не из простых. Сложности и снижение производительности будут поджидать на каждом шагу, особенно если не брать в расчет саму механику игрового процесса. Предусмотреть все невозможно, ведь игроки порой бывают очень изобретательны в попытках заставить сервер выполнить то, для чего он не был предназначен. Только разумный баланс между рисками и устанавливаемыми ограничениями позволит серверу работать в непрерывном режиме и не снижать свою производительность до критичных значений.

На карантине некоторые наши сотрудники соскучились по любимым офисам и решили воссоздать их внутри Minecraft. У вас тоже есть шанс заглянуть к нам в гости, не рискуя своим здоровьем и не тратя время на дорогу.

Для этого мы приглашаем всех желающих на наш сервер minecraft.selectel.ru (версия клиента 1.15.2), где воссозданы дата-центры Цветочная-1 и Цветочная-2. Не забудьте согласиться со скачиванием дополнительных ресурсов, они необходимы для корректного отображения некоторых локаций.

Вас ждут квесты, промокоды, «пасхалки» и приятное общение.

Учебник

: повышение производительности игры - Feed The Beast Wiki

Заявление об ограничении ответственности [править]

Повышение производительности в Minecraft может быть очень простым делом, но быстро становится чрезвычайно сложным, когда в него встроено много модов. При использовании этого руководства не делайте чего-либо, пока вы полностью не осознаете возможные последствия. Советы в этом руководстве различаются по эффективности, в первую очередь, в зависимости от того, какой модпак вы используете и от способности вашего компьютера запускать его. При правильном использовании это руководство может помочь вам значительно увеличить частоту кадров и снизить или полностью устранить задержку.

Вы можете отслеживать частоту кадров и использование памяти (RAM) в Minecraft, нажав клавишу F3 во время игры. fps находится в верхнем левом углу экрана во второй строке текста. Использование памяти отображается в правом верхнем углу экрана в виде процентного значения, представляющего текущее использование памяти.

Советы по производительности [править]

Настройки графики [править]

  • Расстояние визуализации - Расстояние визуализации - это расстояние, на котором игра будет пытаться загрузить мир вокруг игрока.Это может сильно повлиять на производительность, если значение установлено слишком большим. Поэкспериментируйте с уменьшением расстояния рендеринга, чтобы увидеть, улучшится ли производительность.
  • Макс. Частота кадров - устанавливает жесткое ограничение для частоты кадров в игре на основе выбранного значения. Выберите максимально возможное значение, если вас не волнует время автономной работы.
  • Графика - Если установлено значение Fancy, игра будет отображать неважные (но красивые) вещи, такие как прозрачные листья, которые в конечном итоге не сильно влияют на игровой процесс.Установка этого параметра на «Быстрый» гарантирует увеличение частоты кадров в нормальных условиях.
  • Плавное освещение - этот параметр определяет, сколько работы ваш компьютер делает для визуализации реалистичного света и теней. Установите для него значение «выключено», чтобы получить наилучшую производительность, или «минимум», если вы не хотите полностью отключать плавное освещение, но все же хотите повысить производительность.
  • Particles - Визуализирует такие вещи, как частицы портала Нижнего мира. Поэкспериментируйте с понижением параметра, чтобы увидеть, есть ли улучшение производительности.
  • Облака - Может повысить производительность при установке на ВЫКЛ.
  • Использовать VSync - если этот параметр включен, игра пытается синхронизировать количество кадров в секунду с частотой обновления экрана (обычно 60 Гц / 60 кадров в секунду). Отключение этого параметра, скорее всего, увеличит вашу частоту кадров, но может возникнуть разрыв экрана.
  • Использовать VBO - Проще говоря, этот параметр оптимизирует рендеринг игры за счет оптимизации процесса рисования линий на экране. Включение этого рекомендуется, но может потенциально снизить частоту кадров в определенных сценариях.

Дополнительные советы [править]

  • Обновление Java - Новые версии Minecraft Launcher поставляются с пользовательской версией Java, уже упакованной с игрой. Тем не менее, установка последней версии Java может сильно повлиять на производительность .
  • Установка OptiFine - OptiFine - это мод, который оптимизирует Minecraft и потенциально может удвоить частоту кадров. Он создан для ванильного Minecraft, поэтому может не сильно повлиять на производительность в модпаке FTB и потенциально может быть вообще несовместим.Еще один мод, который хорошо работает с OptiFine и может дополнительно улучшить производительность, - это BetterFps (в дополнение к FastCraft, если вы играете в Minecraft 1.7.10)).
  • Использование меньшего количества модов - Каждый установленный мод имеет отдельное влияние на производительность игры. Это будет варьироваться в зависимости от мода, но производительность в конечном итоге будет хуже при одновременной установке многих модов. Выбор пакета модов с меньшим количеством модов может повысить производительность, или вы можете отключить моды, если устанавливаете моды вручную. Отключение модов в официальных модпаках не рекомендуется, поскольку это вызывает проблемы при попытке играть в многопользовательском режиме.
  • Выделение большего количества оперативной памяти - В Minecraft оперативная память является необходимостью. Можно выделить больше оперативной памяти, если у вас есть лишние, но использование слишком большого (или слишком маленького) объема вызовет проблемы. Если на вашем компьютере 8 ГБ ОЗУ и вы не используете шейдерпак или какие-либо пакеты ресурсов HD, 4–5 ГБ (4000–5000 МБ) - хорошее значение. Если у вас 16 ГБ ОЗУ или больше и / или вы используете шейдерпак или пакет ресурсов HD, вам следует выделить 6–8 ГБ (6000–8000 МБ). Обычный Minecraft (без шейдерпака, каких-либо модов или пакетов ресурсов HD) может обрабатывать гораздо меньше оперативной памяти, и поэтому достаточно 1-2 ГБ (1000-2000 МБ), хотя, опять же, вам следует выделить больше, если вы используете Пакет ресурсов HD или пакет. Мод FoamFix рекомендуется для любого пакета модов, так как он значительно сокращает использование оперативной памяти Minecraft.
.

Оптимизируйте paper.yml для уменьшения задержек - База знаний

ПРИМЕЧАНИЕ: Эта статья предназначена специально для серверов Minecraft Java Edition и зависит от Paper для работы.

Если вы используете сервер Paper, у вас есть несколько вариантов, которые можно использовать для оптимизации вашего сервера для обеспечения оптимальной производительности. Это руководство покажет вам настройки, предлагаемые Paper, которые вы можете использовать для оптимизации производительности вашего сервера.

Ниже приведен список настроек из бумаги.yml и их рекомендуемые значения для оптимальной производительности в порядке наибольшего воздействия на наименьшее влияние на производительность. Чтобы получить помощь по редактированию этого файла, обратитесь к нашему руководству по изменению конфигурации Paper.

ОПЦИЯ ОПИСАНИЕ РЕКОМЕНДУЕМЫЕ ЗНАЧЕНИЯ
 максимальное автосохранение блоков на тик 
Уменьшая это значение, вы уменьшите частоту сохранения фрагментов, пока ваш сервер спасает мир.Рекомендуется не опускаться ниже 8, иначе некоторые фрагменты могут вообще не сохраняться. По умолчанию: 24
Оптимизировано: 8
 оптимизировать взрывы 
Это менее важно для версии 1.15, но все же может быть полезно для включения и использования эффективного метода Paper для обработки взрывов, таких как TNT или Creepers.

По умолчанию: false
Оптимизировано: true

 mob-spawner-tick-rate 
Вы можете увеличить промежуток времени между тиками создателя мобов без значительного изменения игрового процесса, но не увеличивайте его, если только вы не испытываете сильную задержку спауна.

По умолчанию: 1
Оптимизировано: 2

 отключение-грудь-кошачья защита 
Это полностью отключит сервер, постоянно проверяющий сундуки, чтобы увидеть, не сидят ли на них кошки. По умолчанию, если кошки сидят на сундуке, игроки не могут открыть сундук. По умолчанию: false
Оптимизировано: true
 скорость обновления контейнера 
Когда открывается инвентарь или сундук, Minecraft обновляет вид по умолчанию каждый тик, чтобы правильно отображать изменения.Вы можете уменьшить частоту обновления инвентаря, но не превышайте 3 или 4. По умолчанию: 1
Оптимизировано: 3
 max-entity-коллизий 
Если ваши игроки часто набивают мобов в небольших помещениях, уменьшение этого числа уменьшит задержку, вызванную сжатием.
.Настройка

JVM: оптимизирован G1GC для Minecraft

Настройка JVM - флаги сборщика мусора G1GC для Minecraft

2 июля 2018 г. в Java, Minecraft, Системное администрирование

Введение

После многих недель изучения JVM, флагов и тестирования различных комбинаций я придумал тщательно настроенный набор флагов сборки мусора для Minecraft. Я тестировал их на своем сервере и использовался годами. Затем я объявил о своем исследовании публике, и по сей день многие серверы используют мои рекомендации по флагам в течение многих лет и сообщают о значительном улучшении поведения при сборке мусора.

Эти флаги являются результатом огромных усилий и результатов их использования в производственной среде на серверах различных размеров, списках подключаемых модулей и типах серверов. Они неоднократно зарекомендовали себя.

Я настоятельно рекомендую использовать эти флаги для запуска вашего сервера. Эти флаги помогают поддерживать работу вашего сервера в СООТВЕТСТВИИ без значительных всплесков сборки мусора. ЦП может быть немного выше, но ваш сервер будет в целом более надежным и стабильным TPS.

Если эти флаги помогают вашему серверу, подумайте о пожертвовании!

Используемые флаги запуска JVM - MC 1.15 (Java 8+, MC 1.8+) Обновление

Используйте эти флаги точно, изменяя только Xmx и Xms. Эти флаги работают и масштабируются в соответствии с любым объемом памяти, даже с 500 МБ, но 1.15 не будет работать с таким низким объемом памяти ...)

java -Xms10G -Xmx10G -XX: + UseG1GC -XX: + ParallelRefProcEnabled -XX: MaxGCPauseMillis = 200 -XX: + UnlockExperimentalVMOptions -XX: + DisableExplicitGC -XX: + AlwaysPreTouch -XSize: GX: + AlwaysPreCentouch -XSize: GX: G1 XX: G1HeapRegionSize = 8M -XX: G1ReservePercent = 20 -XX: G1HeapWastePercent = 5 -XX: G1MixedGCCountTarget = 4 -XX: InitiatingHeapOccupancyPercent = 15 -XX: G1MixedGclientPercent: 90 -XX: G1MixedGCLiveThreshold: + PerfDisableSharedMem -XX: MaxTenuringThreshold = 1 -Dusing.aikars.flags = https: //mcflags.emc.gs -Daikars.new.flags = true -jar paperclip.jar nogui

ПОСЛЕДНЕЕ ОБНОВЛЕНИЕ: 25 апр 2020 15:30 EST

Эти флаги рекомендуются для ВСЕХ версий Майнкрафт! От 1.8 до 1.15+, используйте этот набор.

ВАЖНО - ПРОЧИТАЙТЕ - не используйте ВСЮ память !! ПОЛЬЗОВАТЕЛИ ПТЕРОДАКТИЛЯ!

При установке значений Xms и Xmx, если ваш хост сообщает, что у вас 8000M памяти, НЕ ИСПОЛЬЗУЙТЕ 8000M! Minecraft (и Java) требует дополнительной памяти помимо этого параметра Xmx.Рекомендуется уменьшить Xmx / Xms примерно на 1000-1500M , чтобы избежать нехватки памяти или «OOMKiller», поражающего ваш сервер. Это также оставляет место для операционной системы, которая тоже может использовать память.

Есть 8000M памяти? В целях безопасности используйте 6500M. Но вы также можете спросить своего хоста, покроют ли они эти накладные расходы за вас и вместо этого предоставят вам 9500M. Некоторые хозяева будут! Просто спроси.

Рекомендуемое серверное программное обеспечение

Если вы еще не используете Paper, чрезвычайно улучшенную версию Spigot, вам действительно нужно переключиться! Paper - это гораздо более быстрая версия Spigot с огромными улучшениями производительности.Он также поставляется с исправлениями ошибок и эксплойтов, множеством новых функций и множеством новых API, которые разработчики могут использовать и улучшить работу с плагинами.

Paper - это капля на замену Spigot, с которой каждый плагин Bukkit / Spigot должен работать одинаково. Минусов у перехода на

нет

Paper - единственный способ запустить сервер 1.15 с приличной производительностью!


Рекомендуемая память

Рекомендую использовать минимум 6-10Гб, Неважно сколько плееров! Если вы не можете позволить себе 10 ГБ памяти, отдайте как можно больше, но убедитесь, что вы оставили и операционной системе немного памяти.G1GC работает лучше с большим объемом памяти.

Если вы используете 12 ГБ или меньше памяти для MC, вам не следует изменять эти параметры.

Если вы используете значение Xmx больше 12G

Если у вас есть и используется более 12 ГБ памяти, настройте следующее:

  • -XX: G1NewSizePercent = 40
  • -XX: G1MaxNewSizePercent = 50
  • -XX: G1HeapRegionSize = 16M
  • -XX: G1ReservePercent = 15
  • -XX: InitiatingHeapOccupancyPercent = 20

ВНИМАНИЕ: Если после этого вы увидите увеличение коллекций старого поколения, вернитесь к базовым флагам!

Объяснение данных изменений:

  • Базовый набор флагов рассчитан на 30/40, чтобы снизить риск космических проблем.Чем больше памяти, тем меньше проблем. Мы можем дать больше новому поколению с 40/50, а также снизить процент резерва, поскольку резерв по умолчанию уже будет больше.
  • Увеличение размера области помогает уменьшить огромные выделения и ускоряет перемаркировку. Нам нужен меньший размер области при меньших кучах, чтобы обеспечить достаточное количество доступных областей
  • Мы можем начать поиск памяти старого поколения для восстановления с большей задержкой с IHOP на уровне 20, поскольку у нас есть больше памяти старого поколения, доступной для места на ЦП.

Java GC Logging

У вас проблемы старого поколения с этими флагами? Помогите мне помочь вам! Добавьте следующие флаги в зависимости от вашей версии Java, чтобы включить ведение журнала GC:

Java 8-10:

-Xloggc: gc.log -verbose: gc -XX: + PrintGCDetails -XX: + PrintGCDateStamps -XX: + PrintGCTimeStamps -XX: + UseGCLogFileRotation -XX: NumberOfGCLogFiles = 5 -XX: GCLogFileSize = 1M 9000

Java 11+:

-Xlog: gc *: журналы / gc.журнал: время, время безотказной работы: количество файлов = 5, размер файла = 1M

Как только вы начнете видеть коллекции старого поколения в Timings, возьмите файл logs / gc.log (в том же месте, что и ваш latest.log) и отправьте его мне в Paper Discord для анализа.

Журнал

GC не ухудшает вашу производительность и может быть оставлен включенным в любое время. Файлы не будут занимать много места (5МБ)

Технические пояснения к флагам:

  1. -Xms сопоставление -Xmx - Why: Никогда не запускайте сервер в случае, если -Xmx может запустить систему полностью из памяти.Ожидается, что ваш сервер всегда будет использовать весь -Xmx!
    Затем вы должны убедиться, что в ОС есть дополнительная память поверх этого Xmx для вещей, не связанных с MC / OS. Следовательно, вам никогда не следует запускать MC с параметрами -Xmx, которые вы не можете поддерживать, если java использует все это. Теперь это означает, что если -Xms ниже, чем -Xmx, -У ВАС НЕ ИСПОЛЬЗУЕТСЯ ПАМЯТЬ! Неиспользуемая память - это потраченная впустую память. G1 (и, возможно, даже CMS до определенного порога, но я лишь констатирую, в чем я уверен) работает лучше с большим объемом памяти.G1 адаптивно выбирает объем памяти для каждой области, чтобы оптимизировать время паузы. Если у вас больше памяти, чем необходимо для достижения оптимального времени паузы, G1 просто протолкнет эту дополнительную память в старое поколение, и это не повредит вам (это может быть не в случае CMS, но в случае G1). фундаментальная идея улучшения поведения сборщика мусора - гарантировать, что недолговечные объекты умирают молодыми и никогда не продвигаются по службе. Чем больше памяти у G1, тем больше уверенность в том, что объекты не будут преждевременно переведены в старое поколение.G1 работает иначе, чем предыдущие коллекторы, и может более эффективно обрабатывать большие кучи.

    Если ему не нужна предоставленная ему память, он не будет ее использовать. Весь двигатель работает по-другому и не страдает от слишком большого количества куч, и это общепринятая в отрасли информация о том, что в рамках G1 необходимо сохранять Xms и Xmx одинаковыми!

  2. UnlockExperimentalVMOptions - требуется для некоторых из перечисленных ниже опций
  3. G1NewSizePercent: Это важные.В CMS и других поколениях настройка New Generation приводит к FIXED SIZE New Gen и обычно выполняется путем явной установки размера с помощью -Xmn. С G1 дела обстоят лучше! Теперь вы можете указать проценты от общего желаемого диапазона для нового поколения. С этими настройками мы говорим G1 не использовать 5% по умолчанию для нового поколения, а вместо этого даем 40%! Minecraft имеет чрезвычайно высокую скорость выделения памяти, составляющую не менее 800 мегабайт в секунду на сервере на 30 игроков! И это в основном недолговечные объекты (Block Position)

    Теперь это означает, что MC ДЕЙСТВИТЕЛЬНО нужно уделять больше внимания новому поколению, чтобы иметь возможность даже поддерживать эту скорость распределения.Если ваше новое поколение слишком маленькое, вы будете запускать новые коллекции поколений 1-2+ раза в секунду, что действительно плохо. У вас будет так много пауз, что TPS может пострадать, и сервер не сможет сохранить Затем объедините тот факт, что объекты теперь будут продвигаться быстрее, в результате чего ваше старое поколение будет расти быстрее. Имея больше NewGen, мы можем замедлить интервалы коллекций Young Gen, в результате чего у короткоживущих объектов будет больше времени, чтобы умереть молодыми, и в целом более эффективное поведение GC.

  4. G1MixedGCLiveThresholdPercent : определяет, когда включать регионы смешанных GC в коллекцию Young GC, сохраняя чистоту старого поколения без выполнения обычной коллекции GC старого поколения. Когда ваша память меньше этого процента, старое поколение даже не будет включено в «смешанные» коллекции. Смешанные не такие тяжелые, как полная старая коллекция, поэтому небольшая инкрементальная очистка старой позволяет снизить потребление памяти.
    По умолчанию от 65 до 85 в зависимости от версии Java, мы устанавливаем значение 90, чтобы как можно быстрее удалить мусор в старом поколении, чтобы сохранить как можно больше свободных областей.У моего старого флага было 35, что было ошибкой. Я перевернул намерение этого флага, поскольку думал, что 35 - это то, что делает 65. Вы не должны использовать 35 для этого числа.
  5. G1ReservePercent = 20: MC Скорость выделения памяти в последних версиях действительно безумна. Мы рискуем столкнуться с ужасным «исчерпанием пространства» из-за нехватки свободной памяти для перемещения данных. Это гарантирует, что для этой операции будет использоваться больше памяти. По умолчанию 10, поэтому мы даем ему еще 10.
  6. MaxTenuringThreshold = 1 : Minecraft имеет действительно высокую скорость выделения памяти.Большая часть этой памяти возвращается в поколение eden. Однако временные данные будут перетекать в оставшуюся в живых. Первоначально играл с полным удалением Survivor и имел приличные результаты, но действительно приводит к тому, что временные данные переходят в старые, что не очень хорошо. Max Tenuring 1 гарантирует, что мы не переносим временные данные в старое поколение, но все, что переживает 2 прохода мусора Коллекция просто будет считаться долговечной.
    Это значительно сокращает время пауз в Young Collections, поскольку копирование данных до 15 раз в пространство Survivor для сохраненного объекта действительно занимает много времени для фактически старой памяти.В идеале механизм GC будет отслеживать средний возраст объектов и быстрее хранить данные, но это не так, как это работает.
    Учитывая, что средняя скорость сборки мусора составляет от 10 секунд до нескольких минут на одну молодую сборку, это не приводит к продвижению какого-либо «мусора» и просто задерживает сбор более долговечной памяти в смешанных сборщиках мусора.
  7. SurvivorRatio = 32: Поскольку мы резко уменьшили MaxTenuringThreshold, мы резко сократим использование пространства выжившего. Это освобождает больше регионов для использования Эдемом.
  8. AlwaysPreTouch : AlwaysPreTouch получает настройки памяти и резервирует их при запуске процесса, обеспечивая непрерывность памяти, что еще больше повышает ее эффективность. Это увеличивает скорость доступа к памяти операционной системы. Обязательно для использования прозрачных огромных страниц
  9. + DisableExplicitGC: Многие плагины думают, что знают, как управлять памятью, и пытаются вызвать сборку мусора. Плагины, которые делают это, запускают полную сборку мусора, вызывая значительный всплеск задержки. Этот флаг запрещает плагинам пытаться это сделать, защищая вас от их плохого кода.
  10. MaxGCPauseMillis = 200: этот параметр определяет, сколько памяти используется между минимальным и максимальным диапазонами, указанными для вашего нового поколения. Это «цель» того, как долго вы хотите, чтобы ваш сервер останавливался для сбора данных. 200 стремится к потере максимум 4 тика. Это приведет к кратковременному падению TPS, однако сервер может мгновенно компенсировать это падение, а это означает, что это не окажет значимого влияния на ваш TPS. 200 мс меньше, чем могут распознать игроки. При тестировании ограничение этого значения еще меньшим числом приводит к тому, что G1 недостаточно быстро восстанавливает память и потенциально исчерпывает старый генератор, запускающий полный сбор.То, что это число равно 200, не означает, что каждая коллекция будет 200. Это означает, что она может использовать до 200, если она действительно нужна, и мы должны позволить ей выполнять свою работу, когда есть память для сбора.
  11. + ParallelRefProcEnabled : оптимизирует процесс GC для использования нескольких потоков для проверки слабых ссылок. Не уверен, почему это не по умолчанию….
  12. G1RSetUpdatingPauseTimePercent = 5: По умолчанию это 10% времени, затрачиваемого во время обновления Rset при паузе, уменьшите это значение до 5%, чтобы сделать больше времени одновременным, чтобы сократить продолжительность паузы.
  13. G1MixedGCCountTarget = 4: По умолчанию - 8. Поскольку мы стремимся собирать медленнее, с меньшим использованием старого поколения, постарайтесь быстрее освободить память старого поколения, чтобы избежать исчерпания старого.
  14. G1HeapRegionSize = 8M +: значение по умолчанию рассчитывается автоматически. СУПЕР важно для Minecraft, особенно для версии 1.15, так как при нехватке памяти расчет по умолчанию в большинстве случаев будет слишком низким. Любое выделение памяти, равное половине этого размера (4 МБ), будет рассматриваться как «Огромное» и продвигаться сразу к старому поколению, и его труднее освободить.Если вы разрешите java использовать значение по умолчанию, вы будете уничтожены, и значительная часть вашей памяти будет обработана как Humongous.
  15. + PerfDisableSharedMem: заставляет сборщик мусора записывать в файловую систему, что может вызвать большую задержку, если дисковый ввод-вывод высокий - см. Https://www.evanjones.ca/jvm-mmap-pause.html

Использование больших страниц

Также для больших страниц - еще важнее использовать -Xms = -Xmx! Для больших страниц должна быть указана вся память, иначе вы можете остаться без выигрыша.Эта память в любом случае не будет использоваться ОС, поэтому используйте ее.
Дополнительно используйте эти флаги (Metaspace только для Java 8, не используйте его для Java7):

Код:

-XX: + UseLargePagesInMetaspace

Прозрачные огромные страницы

Спорная функция, но может быть использована, если вы не можете настроить свой хост для реальной HugeTLBFS. попробуйте добавить -XX: + UseTransparentHugePages, но чрезвычайно важно, чтобы у вас также был установлен AlwaysPreTouch. В противном случае THP, скорее всего, причинит вам вред. Я не измерял, как THP работает для MC или как это влияет на AlwaysPreTouch, поэтому этот раздел предназначен для продвинутых пользователей, которые хотят поэкспериментировать.

Кредиты:

Спасибо https://product.hubspot.com/blog/g1gc-fundamentals-lessons-from-taming-garbage-collection за помощь в улучшении моего понимания флагов и внесение улучшений!


История изменений

  • 02.05.2020: добавлено + PerfDisableSharedMem, скорректировано значение MixedGCTarget до 4
  • 25.04.2020: удален OmitStackTraces, так как это могло вызвать проблемы с производительностью некоторых плагинов (но не всех).
  • 05.04.2020 : Массовый рефакторинг предложений флагов.Новый подход к оптимизации времени паузы. Флаги все еще могут меняться. Эти изменения являются обязательными для MC 1.15
  • 4.10.2018 : удалены AggressiveOpts и InitiatingHeapOccupancyPercent. Aggressive удален в Java 11, а IHOP может снизить производительность в Java 11. Вы должны удалить их и для Java 8.
  • 18.08.2018 : значение MixedGCLiveThreshold изменено на 35 (с 50), чтобы обеспечить более ранний запуск смешанного GC.
    Добавлены примечания о рекомендуемом использовании 10 ГБ памяти.
    Добавлена ​​дополнительная флаговая документация
  • 24.05.2018 : Добавлено -XX: + ParallelRefProcEnabled

Теги: сборщик, g1gc, мусор, java, jvm, minecraft, флаги запуска, настройка

,

Смотрите также