Продолжая серию статей что-то против чего-то, мы наконец рассмотрим что-то полезное, а именно сервер Minecraft. Рассмотрим какая операционная система и какая ява все же лучше для того, чтобы хостить лучшую игру человечества. Для сравнения взяты Ubuntu 18.04 LTS и Server Core 2019. На Ubuntu был установлен OpenJDK, а на Windows — Oracle Java и AdoptOpenJDK.
Как и на всех остальных сравнительных тестах, у виртуальных машин не было соседей, на хосте всегда была запущена только одна ВМ.
Серверы запускались с аргументами:
-Xmx8G -server
На Windows Server Core был удален компонент Windows Defender, как в нашем образе с Windows VDS за 99 рублей. Для сравнения, вот что вы теряете, когда оставляете его включенным.
Раунд №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, невозможно дать конкретную рекомендацию, которая объективно лучше для того, чтобы держать на нем сервер.
В данном случае, наверное, стоит выбирать ту операционную систему, с которой вы лучше знакомы.