Короткий ответ
Сначала удалите плохо оптимизированные плагины, потому что они обходятся дороже всего
остального вместе взятого. Затем задайте batching.colliders "0", ограничьте
fps.max значением от 30 до 100, увеличьте server.saveinterval "600"
и рассмотрите nav_disable "true" и ai.think 0, если можете обойтись
без движения животных.
Ключевые моменты
- Rust нужна тактовая частота, а не число ядер. Основные функции Unity однопоточные.
- Один плохо написанный плагин может свести на нет все остальные оптимизации на этой странице.
- FPS сервера это не FPS игрока. Это разные числа, измеряющие разные вещи.
- Измеряйте с плагином Performance Monitor, затем удаляйте его. Он тоже стоит производительности.
- Каждый конвар здесь это компромисс. Знайте, чем жертвуете, прежде чем его задавать.
Что реально влияет на производительность
Стабильная производительность убеждает ваших игроков в том, что у них есть безопасное место для игры, где они не проиграют бой из-за лага и не улетят с обрыва рикошетом. Стоит точно понимать, откуда она берётся, потому что время, потраченное не на то, потрачено зря.
Примерно по степени влияния:
- Плагины. Один плохо написанный может занимать каждый тик сервера.
- Тактовая частота CPU. Потолок, под которым работает всё остальное.
- Число сущностей. Ближе к концу цикла до вайпа именно это меняется у вас под ногами.
- Операции сохранения. На большом мире заметны каждый раз при запуске.
Железо: тактовая частота важнее числа ядер
Вы увидите значительно лучшую производительность сервера у провайдеров, использующих более быстрые процессоры с частотой от 3ГГц и выше. Причина архитектурная, а не случайная: основные функции Unity однопоточные, поэтому они работают на одном ядре и не могут быть распределены по остальным. 32-ядерный процессор на 2.2ГГц будет работать с сервером Rust хуже, чем 8-ядерный на 4ГГц.
Число ядер не бесполезно. Такие вещи, как ИИ NPC и животных, и другие объекты, связанные с картой, можно распределить по нескольким ядрам, поэтому серверы с большим числом игроков действительно выигрывают от дополнительных ядер. Хороший хостер должен предлагать вариант с большим числом ядер для более крупного сервера и в первую очередь размещать Rust на высокочастотных процессорах.
Это самое полезное, что стоит проверить перед покупкой. Если хостер рекламирует число ядер и объём памяти, но не тактовую частоту, обычно это потому, что частота не является его сильной стороной.
Плагины: самый значимый фактор
uMod это модификационная надстройка для Rust, которая позволяет серверам запускать плагины, разработанные в основном сообществом. Производительность сервера не пострадает от хорошо написанных, активно поддерживаемых плагинов.
Но её уничтожит плохой плагин. Незаметно для вас небольшой кусок кода в любом из ваших плагинов может серьёзно снизить производительность сервера, и ни размер, ни кажущаяся простота плагина не подскажут вам, какой именно. Даже самый маленький и лёгкий на вид плагин может вызвать хаос, что подтвердит любой опытный владелец сервера Rust или разработчик плагинов.
Избегайте запуска слишком большого числа плагинов. Само их количество имеет свою цену, отдельно от качества любого из них, и решением проблемы чаще оказывается удаление плагина, а не добавление нового.
Оптимизация плагинов, которые вы оставляете
Некоторые плагины предоставляют настройки для тонкой настройки производительности, вроде таймеров и интервалов. Обычно они выключены по умолчанию или заданы консервативно. Загляните в файл конфигурации плагина и включите их, потому что плагин, опрашивающий что-то каждый тик, хотя мог бы делать это раз в тридцать секунд, выполняет в тридцать раз больше работы, чем ему нужно.
Измерение до того, как вы что-то меняете
Гадать о проблемах производительности значит тратить время впустую. Стоит сделать два замера.
FPS сервера
Это частота кадров, на которой работает сервер. Она не влияет напрямую на частоту
кадров ваших игроков, хотя высокое число сущностей в одной зоне повлияет на оба
показателя. Отслеживайте её по RCON командой FPS.
Плагин Performance Monitor
Performance Monitor для uMod показывает в реальном времени информацию об использовании памяти, времени хуков плагинов и других показателях, влияющих на производительность сервера. Он покажет, какой плагин отнимает больше всего времени на одном хуке, превращая ощущение "серверу плохо" в конкретное имя.
Не оставляйте Performance Monitor работать постоянно. Сам мониторинг потребляет ресурсы и ухудшит производительность, которую вы пытаетесь измерить. Установите его, снимите показания, примите меры, затем выгрузите.
Конвары, которые важны
Каждый из них компромисс, а не бесплатная производительность. Выигрыш реален, и то, чем вы жертвуете, тоже реально.
batching.colliders "0"
Убирает необходимость серверу группировать сущности в батчи. Это большой прирост производительности: при включённом батчинге каждый раз, когда кто-то строит, серверу приходится разбивать и заново собирать все связанные сущности.
Оговорка: если ваш сервер превысит 265 000 сущностей, вам нужно будет включить его обратно, чтобы обойти лимит сущностей Unity. Ближе к концу долгого цикла до вайпа на загруженном сервере это реальное число, а не теоретическое, так что за ним стоит следить.
nav_disable "true"
Отключает NAV mesh на вашем сервере. Прирост производительности большой. Цена в том, что животные и NPC полностью перестают двигаться.
Приемлемо ли это, зависит от вашего сервера. На сервере с сильным упором на PvP, где никто не охотится на оленей, это почти бесплатно. На PvE или ролевом сервере это убирает значимую часть игры.
ai.think 0
Возможно, вы замечали на крупных серверах, что животные не реагируют и не дают отпор. Это
ai.think, установленный в 0. Он оказывает значительное положительное влияние на
производительность, особенно когда число игроков велико и игроки часто оказываются рядом с
животными.
server.saveinterval "600"
Вы можете видеть падения FPS на стороне сервера в момент сохранения на сервере с высоким числом сущностей. Увеличение промежутка между сохранениями сводит это к минимуму.
Компромисс здесь это риск: более длинный интервал означает больше потерянного прогресса, если сервер упадёт между сохранениями. 600 секунд разумный баланс, но если ваш сервер нестабилен по другим причинам, не лечите симптом, делая падения более дорогостоящими.
fps.max
Контролировать FPS вашего сервера в целом хорошая идея, чтобы сервер не работал усерднее, чем
нужно, без всякой пользы для ваших игроков. Facepunch говорили, что игроки не заметят сервер,
ограниченный 30 кадрами в секунду. Настоятельно рекомендуется задать fps.max в
диапазоне от 30 до 100.
Перезапуски
Ежедневные перезапуски могут улучшить производительность на модифицированных серверах. Долгоработающие процессы накапливают нагрузку на память, а плагины, медленно текущие по памяти, встречаются достаточно часто, чтобы плановый перезапуск был разумной страховкой.
Планируйте их на тихий час и объявляйте заранее. global.restart даёт игрокам
предупреждение за 300 секунд с интервалом в 5 секунд, чего достаточно, чтобы добраться до
безопасного места. Молчаливый перезапуск посреди рейда отнимет у вас больше игроков, чем
принесёт выигрыш в производительности.
Что делать, по порядку
-
Сначала измерьте
Проверьте FPS сервера по RCON и ненадолго запустите Performance Monitor. Без исходной точки вы не сможете понять, помогло ли то, что вы сделали.
-
Удалите худший плагин
Тот, что назвал монитор. Это почти всегда самый большой доступный выигрыш, и он бесплатный.
-
Настройте плагины, которые оставляете
Таймеры и интервалы в их файлах конфигурации, где они есть.
-
Примените конвары
Начните с
batching.colliders "0",fps.maxиserver.saveinterval, которые ничего не стоят вашим игрокам с точки зрения ощущений. Рассмотритеnav_disableиai.thinkтолько если можете принять неподвижную живность. -
Измерьте снова
Те же инструменты, те же условия, в идеале при похожем числе игроков. Затем выгрузите монитор.
-
Посмотрите на железо
Если вы сделали всё вышеперечисленное, а производительность всё ещё плохая, потолок это процессор, и никакая настройка его не обойдёт.
Если вы на этом последнем шаге, наше руководство о том, на что смотреть при покупке сервера Rust, разбирает, что спросить у хостера перед переездом.