Minecraft сервер: Windows vs Linux


    Продолжая серию статей что-то против чего-то, мы наконец рассмотрим что-то полезное, а именно сервер Minecraft. Рассмотрим какая операционная система и какая ява все же лучше для того, чтобы хостить лучшую игру человечества. Для сравнения взяты Ubuntu 18.04 LTS и Server Core 2019. На Ubuntu был установлен OpenJDK, а на Windows — Oracle Java и AdoptOpenJDK.

    Как и на всех остальных сравнительных тестах, у виртуальных машин не было соседей, на хосте всегда была запущена только одна ВМ.

    Серверы запускались с аргументами:

    -Xmx8G -server

    На Windows Server Core был удален компонент Windows Defender, как в нашем образе с Windows VDS за 99 рублей. Для сравнения, вот что вы теряете, когда оставляете его включенным. 



    Для каждого из дистрибутивов Java были установлены последние публично доступные версии, а именно:

    Oracle: «1.8.0_241»
    AdoptOpenJDK: «1.8.0_242»
    OpenJDK: «1.8.0_232»

    Раунд №1, генерация мира


    В этом тесте генерируем мир. В качестве генератора выступал Geographicraft с установленным Biomes’O’Plenty, Dynamic Trees, PVG, worley caves, IC и BC.

    Мир отнюдь не классический и генерируется заметно медленнее обычного. 

    Мир размером в 2704 чанков был отгенерирован:


    Windows c AdoptOpenJDK отрывается от своих конкурентов на 5 секунд.

    Раунд №2, старт сервера


    Замер проходил в три прохода для каждой виртуальной машины. Каждый раз каждый из серверов завершал загрузку мира секунда в секунду по сравнению с прошлым результатом.


    OpenJDK на Windows что и OpenJDK на Linux показывают одинаковые результаты.

    Раунд №3, занимаемая память


    Процесс начинает потреблять тем больше памяти, чем больше установлено на нем ядер. Ниже приведена таблица занимаемой памяти процесса пустого сервера без загруженного на нем мира.


    Oracle JRE потребляла в среднем на 80-100 мегабайт больше на четном количестве ядер. Тоже самое касалось и AdoptOpenJDK, только на нечетном количестве ядер.

    Linux не показывал такой странности.

    Раунд №4, 32 курицы в коробке 2 на 2



    Сцена представляет из себя расчет коллизии 32 куриц в коробке 2 на 2. Сцена была подготовлена заранее и один и тот же мир был раскидан по серверам, чтобы все было честно.

    Для этого теста было установлено одно ядро, а процессу выставлялся приоритет реального времени.


    Рабочий набор OpenJDK в этой сцене был на 40 мегабайт больше чем у соперников.


    Среднее потребление процесора у Oracle и AdoptOpenJDK одинаковое, но мусор Oracle при всех равных собирает чаще и интенсивнее, что чаще приводит ко всплескам процессорной активности.

    Чтобы экстраполировать какое количество подобных сцен мы сможем обработать, давайте просто увеличим тикрейт сервера.


    В тесте с повышенной нагрузкой Ubuntu c OpenJDK сравнялся с Windows c AdoptOpenJDk, а Oracle догоняет.


    Под более высокой нагрузкой OpenJDK на Windows дал лучшие результаты, чем на Ubuntu.

    Сервер OpenJDK на Ubuntu постоянно статерил и сцена замирала. Чуть хуже был Windows на этом же OpenJDK. Oracle же справился лучше всех, с наименьшим количеством подвисаний.


    Среди прочих, Oracle SE уложился в тот же объем ОЗУ что и OpenJDK.

    Раунд №5, 64*64 чанка и Dynamic trees



    Эта сцена содержит в себе лес и несколько десятков мобов. Километры деревьев постоянно растут и обновляют положения своих блоков.

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


    Ubuntu + OpenJDK и Windows Server с Oracle на борту не смогли запустить сервер в ранее обговоренными аргументами, поэтому в график не попали.

    Чтобы все же запусить сервер, пришлось изменить флаги на:

    -Xms4g -Xmx8G -server -XX:+UseCompressedOops -XX:+AggressiveOpts

    Все три экземпляра по началу упирались в 100% процессора, но только Windows Server + AdoptOpenJDK не уронил сервер. После сбора мусора все нормализовалось до графика ниже.


    При переходе от тикрейта в 60 до 70, на Ubuntu график загрузки процессора стал вести себя как синусоида, из-за чего среднее значение утилизации ЦП внезапно начало падать от роста сложности задачи. Из-за этого график пришлось остановить там, где он есть сейчас.

    Вероятно, дело в отличиях планировщика Linux’a и Windows.

    Выводы:

    Несмотря на объективную разницу в ОС и дистрибутивах JRE невозможно дать конкретную рекомендацию, которая объективно лучше для того, чтобы держать на нем сервер.

    В данном случае, наверное, стоит выбирать ту операционную систему, с которой вы лучше знакомы.

    UltraVDS
    Хостинг виртуальных серверов (VDS, VPS)

    Комментарии 41

      +7
      Прикольный обзор, спасибо.
      Только просьба в каждом графике писать — больше — лучше или меньше — лучше
        +12

        Ещё лучше сделать все графики от нуля.

          0
          это не всегда удобно :(
            +10
            Но это наглядно показвает реальный расброс в 10%, а не 60%.
            0
            Любопытно, только те графики не от нуля, где Windows вариант «побеждает». Bias?
          +2
          Java то какой версии?
            –3
            Думаю, 8.51(x86). Большинство сборок Minecraft, которые я встречал, включая официальный лаунчер, используют эту версию.
              +2
              Были установлены последние публично доступные версии.

              Oracle: «1.8.0_241»
              AdoptOpenJDK: «1.8.0_242»
              OpenJDK: «1.8.0_232»

              Добавили эту информацию в статью.
              +16
              > Windows c AdoptOpenJDK отрывается от своих конкурентов на 5 секунд.
              Похоже, что вам еще не говорили про отдельное место в аду для тех, кто начинает графики не с нуля.
                +3
                На самом деле мерить так производительность — совсем не показатель. К примеру та же генерация чанков, имеет холодный прогрев, когда чанки генерируются и сохраняются на диск, в дальнейшем только обновление тайлов, на этих чанков (сущности, механизмы) и создает основную нагрузку. Тестирование запуска, это погрешности, которые от запуска к запуску будут меняться. Тестировать нужно с погруженной картой и желательно с игроками. Но как показывает практика OS или JVM особо на показатели не влияет и погрешность в реальной эксплуатации примерно 15%. Ставят Linux чаще всего под сервера, потому как ОЗУ для сервера minecraft очень важна и нужна, а windows кушает на порядок больше.
                  +2
                  На порядок? Вы преувеличиваете. В некоторых случаях разница до полутора раз, но это далеко от «на порядок». Говорю как человек, который держал высоконагруженный сервер на выделенной Win машине и сравнивал с таким же сетапом, запущенным на CentOS.
                    0
                    Каковы были ваши результаты?
                      0
                      Исходные данные: TerraFirmaCraft с изрядно доработанными для стабильности и совместимости сопутствующими модами и аддонами (SmartMoving, Celsium, Ships, Growth, Cellars, OpenCities, вся линейка BiblioCraft, BetterQuesting, и многие другие, всего не упомню уже), оптимизировано по максимуму, так как TFC весьма ресурсоёмок. Вся карта предгенерированная 6000х6000.
                      На Win-машине стояла W10 Enterprise 1803 + Oracle JDK 1.8.0_162-b12, пиковый онлайн до 300, обычный ~220 юзеров. Потребление памяти было в районе 12гб.
                      При тестовых запусках на дедике с CentOS и openjdk-1.8.0.151-5.b12 тот же сервер с такой же нагрузкой уложился в 9гб, но на тот момент у проекта не было человека, который грамотно разбирается в администрировании линукса, поэтому было решено оставить Win вплоть до естественной смерти проекта (падение онлайна спустя год с лишним из-за потери интереса у основной массы хардкор-игроков).
                      На тот момент таких подробных тестов, как это сделали вы, не проводили, так что могу назвать лишь приведённые выше цифры.
                  0

                  А почему AdoptOpenJDK тестировался только под Windows? Насколько я вижу его сборки есть под все платформы.

                    0
                    А ещё есть Bedrock-версии, вроде как вообще без Java…
                      0
                      Ну на Bedrock есть vanilla ядро, почти не администрируемое, и семейство pmmp/nukkit/minet, которые ничего кроме плагинов не умеют.
                        0

                        И за счёт этого имеет кроссплей, уникальный для такого класса игр.

                      0
                      OracleJDK, кстати, тоже есть под Linux, но не тестировался там почему-то, хотя как раз интересно было бы взглянуть на один и тот же JDK на разных платформах.
                      0
                      Докер версия Minecraft. Поставил и не паришься hub.docker.com/r/itzg/minecraft-server
                      Сам ее использую, с сынишкой играю. Все отлично.
                        0
                        Спасибо за пост. Но тест довольно грубый и ему нельзя доверять:

                        — В каждом минорном апдейте джавы — сотни, если не тысячи изменений. Поэтому, как минимум, нужно было взять одинаковую версию;
                        — Сейчас последняя LTS версия — Java 11, не понятно зачем тестить восьмерку. Которая по фичам уже очень далеко позакди 11-ки;
                        — Нету инфы про патчи — spectre, meltdown и остальные;
                          +1
                          не понятно зачем тестить восьмерку
                          Потому что только на ней официально поддерживается работа Minecraft. Ванильную игру, конечно, можно запустить и на более свежих версиях, но с модами это редко приводит к успеху.
                          0

                          Должен сказать что не совсем объективное сравнение. Почему на Windows вы поставили "классическую" Java, а на Linux OpenJDK? Оракловская Java на Ubuntu тоже есть, и результаты будут лучше, ибо сама технология Java изначально разрабатывается Oracle. И на Windows аналогично OpenJDK есть. А из-за подобного сравнения создаётся негативное впечатление о Linux в целом, а не о JVM.

                            0

                            Почему негативное то?
                            По-моему то что тут на линуксе тестировалось показало в целом лучшие результаты наоборот.


                            ибо сама технология Java изначально разрабатывается Oracle

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

                              0

                              Да не было никакого форка, Оракл Jdk собирается из тех же исходников, что Open JDK

                            +1
                            чтобы хостить лучшую игру человечества

                            Это почему она вдруг лучшей стала?
                              0
                                +1
                                List of best-selling video games

                                Когда «лучший» стал синонимом «самый продаваемый»? Или миллионы мух не могут ошибаться?
                                  +1
                                  Я бы сказал «Революционная». Все таки эта одна из первых 3Д игр, полностью процедурных, с воксельным миром. Мне было очень интересно наблюдать как разработчик за ней. Как она с бета версий эволюционировала и наращивала всякие штучки-дрючки с оптмизациями, рендера и прочее.

                                  Так и когда я попробовал игру — когда она была еще в бете. Я был в шоке. Перед тобой бесконечный мир, в котором ты можешь делать что угодно.
                                  То что ее хейтят из за того, что она стала хайповой в аудитории 13+ — я считаю зря. Игра и вправду заставила меня здраво так офигеть. А до этого, потолком песочниц я считал игру Black and White.
                                  С дварф фортресом, который любят в сравнение кидать, я познакомился позже, но это явно игры разного жанра.
                                    0
                                    Ну сама идея да, хорошая, тут я не спорю.

                                    Но называть её «лучшей» — невежество.
                                0
                                Шутка? не, не слышали…
                                0
                                На linux удобно сделать systemd-скрипт (если он есть) с параметром. Позволяет однотипно запускать-останавливать отдельные миры — например, завести отдельный сервер для Missile Wars, не трогая основной.
                                  +1

                                  Перезамерьте, плиз, потребление памяти под Linux с переменной окружения MALLOC_ARENA_MAX=1.


                                  История на эту тему

                                    0

                                    Какое ядро, какая версия ядра использовались? Они сильно отличаются по производительности.


                                    Было бы интересно посмотреть на такое сравнение операционных систем с таким сервером: paper ядро новейшей версии, оптимизированные аргументы java для minecraft и один и тот же мир со множеством прогруженных игроком сущностей — мобы, животные, рамки, стойки брони т.д. — они дают самую ощутимую нагрузку при ежедневной работе сервера. Генерация мира же делается всего один раз и без игроков, чтобы переждать один раз этот затратный по ресурсам процесс и больше к нему не возвращаться.

                                      +1
                                      Везде использовался стандартный сервер Minecraft из лаунчера и Forge 1.12.2 — 14.23.5.2847.
                                      –1
                                      Я понимаю что Вам выгодней давать в аренду виртуалки с виндоузом.
                                      Но было бы интересней увидеть тесты на debian и freebsd.
                                      А не дестктопной убунте еще и с иксами (или даже с дефолтным гномом?)
                                        +1
                                        Использовался Ubuntu Server 18.04 LTS.
                                        В тестировании десктопные версии не участвовали.
                                        –4

                                        Ужасная статья. UltraVDS пополнил мою копилку «плохих» компаний, с которыми не стоит иметь дел.
                                        Ни методики тестирования, ни информации об окружении, ничего, просто набор каких-то непонятных графиков.

                                          0
                                          интересненько
                                            –3

                                            Статья соответствует заголовку примерно так же как и «гимп в линуксе против фотошопа в венде» при существующем заголовке.
                                            Фактически, проверили работу трёх сборок джавы. При чём тут «windows vs linux» — загадка. И это при том что все эти три джавы есть под обе платформы, но авторы решили не заморачиваться. Ценность теста — околонулевая.


                                            Но да, если смотреть со стороны «покупайте наши виртуалки с вендой», тогда всё нормально.

                                              +1
                                              Это неверно, различия могут быть еще в файловых системах и в том, как работают планировщики процессора в разных ОС.
                                              И между OpenJDK на разных ОС, как вы видите, была разница.
                                                –2

                                                Так ведь для того чтобы увидеть эти самые различия в планировщике и ФС нужно использовать одинаковые джавы, а не разные. В тесте же сравнили «гимп в убунте» и «фотошоп в венде» и выдали как сравнение «linux vs windows». Чушь ведь!

                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                            Самое читаемое