Данная статья создана на основе статьи [Ссылка на источник]
здесь добавлено множество уточнений и рекомендаций основанных на личном опыте использования.
В этой небольшой статье описаны средства оптимизации игрового клиента и сервера при помощи общедоступных средств, которые известны мне. Статья в первую очередь нацелена на новичков.
Инструментарий
Сейчас существует довольно много инструментов для определения проблем разного рода, в этом списке отображены самые популярные и надежные инструменты профилирования и анализа клиента/сервера
WarmRoast - Профайлер уже долгое время не поддерживается автором, но все еще может помочь в нахождении проблем. Важно! Для его работы в некоторых случаях необходимы MCP mappings, в противном случае итоговые данные будут “не читабельны”.
Spark - Продвинутый вариант профайлера (который создавался на базе WarmRoast), поддерживаются регулярно, имеет версии с 1.12.2 до 1.15.2 включительно, для fabric, forge, bukkit, Sponge, BungeeCord и Velocity. Рекомендуется для использования как на стороне клиента так и сервера (в случае необходимости поиска проблем)
WorldGuard - Возможность профилирования сервера при помощи плагина, используя команду /worldguard profile -p - плагин в течении 5-ти минут создаст файл в своей директории с подробным логом процессов. Данные могут быть не точны, такой способ не рекомендуется использовать.
Также есть варианты профилирования процесса клиента при помощи VisualVM
Модификация TickProfiler - Еще одна возможность определить источник задержек и лагов на сервере и клиенте
Модификация laggoggles - Более наглядный вариант модификации для определения задержек на сервере и клиенте, поддерживаются версии 1.10.2 и 1.12.2
Умеет визуально отобразить (в игровом процессе) источники задержек сервера/клиента.
Вспомогательный инструментарий (для решения некоторых проблем)
WorldBorder и WorldBorder Forge - Позволяет ограничить миры и прегенерировать их.
Chunk PreGenerator - Прегенератор чанков
NBT Explorer - Редактор NBT данных (.dat) а также .mca, .mcr, r2.mcr, r2.mca и schematic файлов.
Системные Требования
Запуск чистого minecraft возможен на любом “чайнике” но когда речь идет о запуске пользовательских сборок модификаций, здесь (в зависимости от количества модов) и потребуется намного больше RAM и немного мощней процессор.
К системным требованиям стоит уточнить, что для запуска средней сборки на 1.7.10 вам потребуется
- х64-битная разрядность ОС; (Настоятельно рекомендуется использовать 64х систему, так как х32 сильно ограничивает выделение памяти)
- Как минимум 3-4 ГБ установленной оперативной памяти;
- Процессор линейки Intel i3, i5, i7 и старше;
- Видеокарты линейки Radeon с архитектурой GCN2 и выше; Nvidia серии GTX 500-900;
- Поддержка OpenGL версии 1.4 и выше
Для запуска средней сборки на 1.12.2 вам потребуется
- х64-битная разрядность ОС;
- Как минимум 4-8ГБ установленной оперативной памяти;
- Процессор линейки Intel i3, i5, i7 и старше;
- Видеокарты линейки Radeon с архитектурой GCN2 и выше; Nvidia серии GTX 500-900;
- Поддержка OpenGL версии 2.1 и выше
Важно! НЕ выделяйте на клиент памяти более чем это положено в рекомендациях, это может привести к ухудшению производительности игрового клиента и системы в целом.
Примечание! Версия игры 1.12 может работать и на OpenGL версии 1.4, но в этом случае работоспособность модов не гарантируется. Например модификация Avaritia требует версию 3.0 для корректной работы.
Определение типа проблемы
Перед началом, вам стоит определится, с какой проблемой вы столкнулись и перейти в раздел с информацией о ней. Но, перед началом, стоит ознакомится с некоторыми важными аспектами, такими как логи клиента или сервера.
Вопрос: Как читать crash-logs клиента или сервера?
И так, разберем следующий пример:
crash-logs example
Нажмите чтобы развернуть
crash-logs example
Нажмите чтобы скрыть
Раздел Warning, в этом разделе нам сообщают какие модовые библиотеки и core моды были загружены (моды с наибльшим приоритетом)
WARNING: coremods are present:
RandomPatches (SYS_RandomPatches.jar)
OTGCorePlugin (OTG-Core.jar)
McLib core mod (LIB_MClib.jar)
...
Дата и время когда возникла проблема
Time: 3/16/20 8:57 PM
Описание типа проблемы
Description: Exception in server tick loop
Раздел Трассировка стека (stack trace) представляет собой отчет о выполнении программы в момент появления ошибки. Может показатся, что здесь много информации (в некоторых случаях stack trace может занимать тысячи символов), при внимательном рассмотрении мы можем вывести ошибку, выбрав определенные части трассировки стека.
Missing Mods:
unknown : need [1.12.2,): have missing
net.minecraftforge.fml.common.MissingModsException: Mod thaumcraft (Thaumcraft) requires [baubles@[1.12.2,)]
at net.minecraftforge.fml.common.Loader.sortModList(Loader.java:266)
at net.minecraftforge.fml.common.Loader.loadMods(Loader.java:572)
at net.minecraftforge.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:98)
at net.minecraftforge.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:333)
at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:125)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:486)
at java.lang.Thread.run(Thread.java:748)
В этом примере мы можем сказать, что мод отсутствует из-за части трассировки стека, говоря «unknown : need [1.12.2,): have missing». Если мы перейдем к следующему разделу, то увидим, что она сообщает «net.minecraftforge.fml.common.MissingModsException: Mod thaumcraft (Thaumcraft) requires [baubles@[1.12.2,)]» который можно перевести как “мод Thaumcraft для правильной работы требует Baubles версии 1.12.2”
Раздел подробных характеристик - здесь рассмотрены сведения о вашей системе, JVM аргументы которые были применены при запуске клиента или сервера, информация о установленной Java и выделенной RAM
Details:
Minecraft Version: 1.12.2
Operating System: Linux (amd64) version 3.10.0-1062.9.1.el7.x86_64
Java Version: 1.8.0_241, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 1815886552 bytes (1731 MB) / 2130051072 bytes (2031 MB) up to 2130051072 bytes (2031 MB)
JVM Flags: 8 total; -Xmx2048M -Xms2048M -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=2 -XX:+AggressiveOpts -Xincgc
IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
CraftBukkit Information:
Running:
Failed to handle CraftCrashReport: craftbukkit not runs
FML: MCP 9.42 Powered by Forge 14.23.5.2847 145 mods loaded, 144 mods active
States: U = Unloaded L = Loaded C = Constructed H = Pre-initialized I = Initialized J = Post-initialized A =
Available D = Disabled E = Errored
Здесь можно увидеть какие моды были загружены, узнать их версию и “состояние” их загрузки на момент возникновения проблемы. Одним из лучших инструментов с отчетами о сбоях является знание о том как был загружен мод.
Состояния загрузки могут быть следующие: «U» = отгружен «L» = загружен «C» = создан «H» = предварительно инициализирован «I» = Инициализирован J = постинициализировано A = доступно D = отключено E = ошибка
Вы можете увидеть эти состояния слева от каждого мода. В этом примере они только добрались до загруженного состояния. Так что если у вас есть мод, который был например UCE, это означало бы, что мод Unloaded (отгружен), Constructed (создан) и than Errored (вызвал ошибку), что означает, что произошла ошибка при загрузке этого конкретного мода и в итоге, это привело к аварийному завершению клиента или сервера.
1. Серверная часть
- 1.1 Низкий TPS сервера
- 1.2 Краш сервера
- 1.3 Проблема с чанками
2. Клиентская часть
- 2.1 Низкий FPS
- 2.2 Просадки FPS, Фризы
- 2.3 Графические артефакты
- 2.4 Зависание клиента
- 2.5 Краш клиента
1. Серверная часть
1.1 Низкий TPS сервера
Для того что бы понять, что вызывает сильную задержку на сервере - в первую очередь вам нужно понять то откуда исходит проблема, а для этого рекомендую использовать инструменты представленных ниже, можно использовать tickProfiler, spark и laggoggles вместе для получения максимального количества фидбека от сервера.
Частые причины возникновения проблем такого рода
- 1.1.1 Процессы происходящие в чанке или в чанках которые вызывают сильные задержки, это могуть быть заводы игроков, отдельные трубы или механизмы, большое количество существ, все это могут помочь определить инструменты описанные выше.
- 1.1.2 Лежащие в мирах предметы (дроп), если такого дропа тысячи в загруженных чанках, это может вызывать сильную задержку.
- 1.1.3 Прогрузка чанков - если вы не прегенерировали мир до того как пустили на него других игроков, тем более если ваш генератор работает в паре с другими модами на генерацию, может вызвать сильное падение TPS при простой прогулке игрока по миру, так как чанки ранее вокруг него еще небыли созданы ранее. Рекомендуется прегенерировать мир при помощи Chunk PreGenerator или WorldBorder инструментов
- 1.1.4 Зависание или проседание сервера при работе с плагинами WorldEdit
- 1.1.5 Большое значение View Distance (Радиус прогрузки чанков)
1.2 Краш сервера
Существуют сотни различных причин, по которым ваш сервер может выйти из строя, это может быть связано с проблемой чанков, серверным ядром, модами, плагинами и многим другим. Вы можете сузить причину появления такой проблемы ознакомившись с crash-report логом, подробным debug-логом (в зависимости какое серверное ядро вы используете, зачастую оно предлагает функции по дебаг режиму) или обычным логом сервера, решение проблемы в 90% случаях лежит на поверхности лог-файлов. Если вы сможете найти stack trace который возможно вызвал проблему, вы сможете обратится в google со строкой ошибки, чтобы узнать, есть ли какие-либо решения для вашего случая.
Если проблему не удается понять или найти решение обычными способами? - Первое что необходимо, выделить stack trace ошибки, какой бы он не был, и попытаться связаться с автором, предоставив ему всю необходимую информацию о проблеме, возможно он решит сложившеюся проблему.
Если не удается понять что вызвало проблему? - В таком случае необходимо восстановить резервную копию (отменить последние изменения) или методом перебора (удаляя добавляя моды) определить что именно вызвало сбой.
Иногда бывает так, что сервер аварийно завершил работу не создав при этом никаких отчетов, это означает что причина сбоя лежит вне самого сервера, чаще всего это сбой работы Java, отчеты о таких сбоях появляются в корневой папке сервера файлами по типу hs_log_pid.
1.3 Проблема с чанками
С чанками может быть много проблем, среди них можно выделить скорость прогрузки мира, невозможность загрузить некоторые чанки отдельно (вместо них появляется пустота) или чанки при попытке загрузить которых сервер уходит в аварийный рестарт.
Скорость загрузки может напрямую зависеть от аргументов JVM которые вы применяете к серверу, но чаще всего это то, какие модификации (и как много) вмешиваются в генератор мира, самыми тяжелыми, которые были протестированы мной, могу выделить Biomes O Planty, RTG, OTG и COG - Последний очень тяжелый, что делает его использование без прегенрации чанков невозможным. Также есть много других модов которые заметно сильно изменяют игровой мир, использование их, в том числе вместе сильно замедляют этот процесс.
Если сервер не может загрузить определенный чанк или чанки - тут может быть несколько причин, одна из них это повреждение файла региона чанков (r.Х.Х.mca) либо проблема чтения/записи файла внутри системы, также отображение чанков может быть затруднено если у клиента установлен режим загрузки чанков multicore (использование OptiFine).
Если сервер при попытке загрузить чанк уходит в аварийный рестарт - прежде всего нужно понять почему именно сервер ушел в рестарт, после этого скорее всего, если вам не удастся решить корень проблемы, вам потребуется удалить этот чанк, тем самым заствив сервер регенерировать его. Важно! Не удаляйте .mca файл целиком, вы удалите пулл чанков, что бы удалить один чанк, вам потребуется открыть файл в NBT Explorer и удалить проблемный чанк или чанки в регионе.
2. Клиентская часть
2.1 Низкий FPS, Просадки FPS, Фризы
Количество причин для этого пункта может набраться миллион и маленькая тележка. Но, если у вас системные требования соответствуют тем что рекомендуют создатели модпаков или других игровых клиентов, причин может быть несколько.
Частые причины возникновения проблем такого рода
- 2.1.1 Большое количество существ или других entity в радиусе вашей прорисовки
- 2.1.2 Большой радиус количества прогруженных чанков для клиента
- 2.1.3 Использование шейдеров
- 2.1.4 Использование текстур-ресурс паков с большим разрешением текстур (может сильно влиять на загрузку GPU)
- 2.1.5 Использование клиентских модификаций, таких как BetterFolliage, Dynamic Surroundings и прочее
- 2.1.6 Использование устаревшего ПО, Java, OpenGL, Видеодрайвера
- 2.1.7 Неверное использование JVM аргументов
2.2 Графические артефакты
Данный тип проблемы возникает в 99% случаев из за устаревших видеодрайверов или при использовании шейдеров.
Частые причины возникновения проблем такого рода
- 2.2.1 Использование устаревшего ПО, Java, OpenGL, Видеодрайвера
- 2.2.2 Использование шейдеров
2.4 Зависание клиента
Что бы понять причину зависания клиента, стоит ознакомится с лог файлом в (который можно найти в папке logs) все последние события находятся в самом его низу, также зависание клиента могут вызывать процессы происходящие на сервере в радиусе прогрузки чанков.
Частые причины возникновения проблем такого рода
- 2.4.1 Смена локализации
- 2.4.2 Смена текстур-ресурс паков
- 2.4.3 Смена прессета шейдеров (лучше всего применять такие изменения в главном меню игры, не во время игрового процесса, в противном случае игровой клиент может перманентно зависнуть)
- 2.4.4 Процессы происходящие в радиусе прогрузки на сервере
2.5 Краш клиента
Как в случае с сервером, существуют сотни различных причин, по которым игровой клиент может выйти из строя, это может быть связано с проблемой чанков (некоторые моды вызывают не обрабатываемую ошибку на стороне клиента) и модами. Вы можете сузить причину появления такой проблемы ознакомившись с crash-report логом или обычным логом клиента (который можно найти в папке logs), решение проблемы в 90% случаях лежит на поверхности лог-файлов. Если вы сможете найти stack trace который возможно вызвал проблему, вы сможете обратится в google со строкой ошибки, чтобы узнать, есть ли какие-либо решения для вашего случая.
- Если проблему не удается понять или найти решение обычными способами? - Первое что необходимо, выделить stack trace ошибки, какой бы он не был, и попытаться связаться с автором или создателями модпака, предоставив ему всю необходимую информацию о проблеме, возможно он решит сложившеюся проблему.
Иногда бывает так, что клиент аварийно завершает работу не создав при этом никаких отчетов, это означает что причина сбоя лежит вне самого игрового клиента, чаще всего это сбой работы Java, отчеты о таких сбоях появляются в корневой папке игры файлами по типу hs_log_pid. Пример решения доступен по этой статье
Оптимизация
Существуют несколько способов оптимизировать клиент, использование их в комплексе позволит добиться вам нужного эффекта. Но, для начала рассмотрим простые рекомендации для повышения приоритета в системе, которые помогают некоторым игрокам.
1. Установка приоритета для GPU в Nvidia
Если у вас есть видеокарта от NVIDIA, следуйте следующим шагам:
- Запустите “Панель управления NVIDIA” –> Перейдите в “Управление настройками 3D” –> Нажмите на “Программные настройки” –> Выберите все “jawaw.exe” на вашем компьютере (у меня их два: один в Program Files, другой - в Program Files(x86)) и поставьте им всем для использования “High-performance NVIDIA processor” –> Измените название вашего лаунчера (Twitch Launcher, MultiMC и т.д.) на “minecraft.exe”.
Это должно заставить ваш игровой клиент использовать вашу дискретную видеокарту.
2. Метод путем освобождения ресурсов
Один из простых способов повысить производительность клиента, при ограниченных ресурсах ПК это закрытие всех программ, которые используют много GPU или RAM. Просто посмотрите в диспетчере задач, какие программы требуют много ресурсов. Там же их можно и закрыть. После этого найдите там процесс Minecraft (чаще всего приложение от Java), нажмите ПКМ и перейдите к пункту “подробно” что перебросит вас на вкладку “подробности”, нажмите ПКМ снова и задайте приоритет процессу как “Высокий”.
3. Использование аргументов JVM
Этот пункт предназначается для тонкой настройки работы игрового клиента, важно понимать, что если вы достигли требуемого результата производительности на своем ПК при помощи аргументов, это не значит что такой результат будет у всех, У многих игроков устаревшие системы, могут отличатся версии Java и установленные драйвера, поэтому стоит подходить к этому с осторожностью.
Подробная статья о аргументах JVM которые могут вам пригодится: http://rubukkit.org/threads/uskorenie-raboty-java-argumenty.111538/
- Также стоит рассмотреть следующую статью
- Готовые аргументы клиента, возможно будут полезны вам
- Готовые аргументы сервера, используется на “боевых” серверах:
-server -Xmx{MAX_MEMORY}M -Xms{START_MEMORY}M -Djline.terminal=jline.UnsupportedTerminal -Dfml.queryResult=confirm -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=2 -XX:+AggressiveOpts -Xincgc -Dfml.doNotBackup=true
4. Изменение Virtual Machine
Этот метод предлагает изменить стандартную Java Virtual Machine на OpenJ9. Подробное описание в этой статье.
Работоспособность модпаков при этом не гарантируется.
5. Установка дополнительных модификаций
Моды для [1.12.2]: (C - Client, S - Server)
- C | BetterFPS - Общее улучшение производительности клиента
- C | TexFix - Оптимизация загрузки текстур
- C/S | VanillaFix - Общие исправления
- C | FoamFix - Оптимизация
- C | Smooth Font - Кастомизация шрифтов, палка о двух концах, может как повысить производительность, так и понизить её
- C | OptiFine - Клиент мод, улучшение рендера, может как увеличить производительность так и значительно ухудшить
- C/S | Phosphor - Улучшение движка освещения
- C/S | Ai Improvements - Улучшение AI мобов
- S | Born in a Barn - Исправление загрузки деревень
- S | Tick Dynamic - Увеличивает TPS при помощи задержки Entity и TileEntities
- S | Stackie - Почти тоже самое что и Clumps
- C/S | Surge - Общая оптимизация игры
- S | Clumps - “связывает” сферы опыта для уменьшения нагрузки
- S | FastFurnace - Кэширует последний использованный рецепт и проверяет этот рецепт перед повторным сканированием всего реестра
- S | FastWorkbench - Аналогично FastFurnace
- S | Multithreaded Noise - Ускоряет загрузку чанков
- S | Unloader - Отгружает миры если они не используются
- S | Lag’B’Gon Reborn - Удаляет сущностей и дроп из мира
- C | FpsReducer - Автоматически освобождает использование ресурсов GPU и CPU, когда игровой клиент не используется
Моды для [1.7.10]: (C - Client, S - Server)
- C | BetterFPS - Общее улучшение производительности клиента
- C | OptiFine - Клиент мод, улучшение рендера, может как увеличить производительность так и значительно ухудшить
- C/S | Ai Improvements - Улучшение AI мобов
- C | Fastcraft - Общая оптимизация
- C | FpsReducer - Автоматически освобождает использование ресурсов GPU и CPU, когда игровой клиент не используется