Дорогие игроки!
Сервер запущен на старом оборудовании уже как 2 часа, Вы можете заходить и играть, все миры и Ваши данные сохранились!
Что произошло:
Два месяца назад в связи с участившимися проблемами соединения между Россией и зарубежными провайдерами мы приняли решение о переносе всей нашей инфраструктуры в Россию с целью повышения стабильности сети и минимизации пинга для игроков.
С этого момента уже начались сложности, поскольку для функционирования нашего сервера на ядре Folia требуется крайне специфичное оборудование на платформе AMD EPYC и только определённых моделей, а это оборудование в сильном дефиците в России и стоит очень дорого, поэтому мы искали хостинг который поможет нам собрать физические сервера на этой платформе.
Физические сервера AMD EPYC нам собирали чуть больше месяца, далее настраивали сетевое оборудование и другие физические сервера под базы данных, прокси и договаривались с защитой. После этого началось тестирование нового оборудования, в ходе которого мы провели всевозможные тесты, запустили полную копию AresMine.
Вся новая инфраструктура обошлась нам в три раза дороже чем старая, но мы были готовы пойти на такие расходы ради стабильности и низкого пинга для игроков.
Мы перешли на новое оборудование и сразу же начались проблемы с сетевым соединением, подскочил пинг, одновременно с этим нам прилетела очень сильная DDoS атака, эти проблемы мы оперативно решили и всё было замечательно.
Спустя некоторое время, когда на одном из режимов онлайн достиг 400 игроков, вновь начались проблемы с пингом, мы начали искать причину и случайно заметили крайне высокую, даже аномальную, загрузку процессора, режим съедал практически 100% процессорного времени, когда нормальные показатели порядка 30% с такой нагрузкой.
При такой высокой нагрузке на процессор неудивительны проблемы с пингом, поскольку процессор участвует во всей работе игрового сервера, в том числе и за обработку сетевых потоков, которые отправляют данные игрокам и принимают данные от них.
Мы начали проводить всевозможные замеры и тесты вновь, процессор был идентичен старому оборудованию, все настройки физического сервера и ОС Linux тоже соответствовали предыдущим настройкам. Кроме одного - на новом оборудовании у нас было 2 плашки оперативной памяти, а на старом 8.
Мы учли абсолютно все моменты при переезде, кроме каналов памяти, которых было 8, а стало 2, в итоге пропускная способность памяти упала в 4 раза что и вызвало критические проблемы с производительностью.
Почему память вызвала такие проблемы:
Во время работы Java приложения, которым и является наш сервер, абсолютно на любое действие требуется выделение памяти: Игрок нажал на пробел -> Отправился пакет на сервер -> На сервере пакет прочтён, обработан -> Вызваны обработчики события прыжка. Только за это одно действие выделилось пару килобайт памяти, а помимо этого есть прожорливые вещи, как чанки. И теперь представьте, что таких действий в секунду вызывается сотни тысяч, а иногда и миллионы, которые связаны с: игроками, чанками, мобами и т.д.
В Java программист не занимается очищением памяти самостоятельно, за него это делает "сборщик мусора", который сканирует и очищает память от неиспользуемых данных, так называемого "мусора". В итоге мы имеем огромное выделение памяти, которая должна практически сразу же очиститься, чтобы хватило места для новых данных.
Итого получаем обращений в память 100 гигабайт в секунду на 500 онлайна, а наша пропускная способность была около 80 гигабайт в секунду, что создало "бутылочное горлышко" после 400 игроков онлайна и сервер начал лагать. С нашими вайпами по 700-800 игроков (а мы хотим 1000 игроков) нам нужно все 200 гигабайт пропускной способности.
Мы не предвидели эту проблему потому что даже не задумывались о ней и узнали только после перехода. А спросить про такое практически не у кого, мы одни из единственных в мире стоим на ядре Folia при таком высоком онлайне на одном сервере.