Проблема падений и лагов может возникнуть неожиданно и внезапно у любого сервера. Поэтому разберемся более подробней в статье, написанной для того, чтобы вы смогли самостоятельно настроить сервер для бесперебойной работы, исключить возможность падений и зависаний вашего сервера. Статья написана скорее для новичков кто впервые сталкивается с администрированием игрового сервера.
Ниже приведены примеры (причины) падания сервера.
- DDoS атаки, эксплоиты
- Битая карта
- Конфликты плагинов
- Ошибки в работе плагинов
- Взлом аккаунта, подбор RCON пароля
- Проблемы в параметрах запуска сервера
- Ошибки в коде самого сервера
DDoS атаки, эксплоиты
- Во время атаки сервер становится недоступным для подключения игроков и программ управления (если DDoS-защита не смогла сдержать атаку). Также сервер не управляем в панели, не отображается его статус и не работает фтп. Фактически ваш сервер, и другие сервера на этой же физической машине (тот же IP-адрес), которую атакуют, запущен и работает исправно, просто к нему нету доступа. Чтобы доступ к серверу возобновился, остаётся только ждать завершения атаки, также возможно приобрести более надёжную защиту от DDoS-атак, если это целесообразно для вашего сервера и если хостинг предоставляет такую услугу.
- Также почти всегда сервера имеют уязвимости (експлоиты). Это обычные ошибки или недоработки в коде сервера, которые допускают разработчики при написании кода. Людям свойственно допускать ошибки, код пишут не роботы 😉
Учтите что 100% защиты от атак и експлоитов нет, как и на любом другом хостинге. Так как есть эксплоиты от которых нет защиты абсолютно ни у кого, и на любую защиту от атаки будет более сильная или умная атака.
Отсутствие ошибок в работе плагинов
- Вычислить плагины, которые являются причиной сбоев в работе сервера иногда нелегко. Сервера падают не записывая в лог причину падений, крашлоги также не создаются. Остаётся только положиться на логи мода Umod или лог консоли во время поиска проблемы.
Конфликт плагинов
- Есть много плагинов, у которых предназначение одно и тоже. Первый плагин не дает сделать свое предназначение и наоборот, отсюда конфликт — падение производительности, спам ошибок в консоль или падение сервера. Пример: допустим если установить две системы бана или даже 3 системы бана, или несколько систем управления лутом. Может вам смешно. Но у некотрых “пользователей” такое есть.
- Чтобы избежать падений по этой причине нужно выключать по одному или по несколько плагинов, которые делают схожую работу и смотреть за дальнейшей работой сервера.
- Посмотрите в лог-файлы на наличие ошибок. Зайдя туда вы может увидить примерно это:
[Oxide] 10:32 [Warning] Calling hook OnNpcPlayerTarget resulted in a conflict between the following plugins: PluginName1 - True (Boolean), PluginName2 (False (Boolean))
- Это значит что два плагина PluginName1 и PluginName2 используют один и тот же хук OnNpcPlayerTarget, из-за этого и конфликтуют. Рекомендуется удалить один из плагинов.
Некоторые ошибки
- Наиболее часто ошибки в плагинах возникают после обновлений серверной части игры.
- Некоторые ошибки могут привести даже к вайпу сервера.
- Поэтому почаще проверяйте консоль сервера после выхода обновлений.
- Например, вы можете увидеть ошибку, которая значит что плагин не может вызвать определённый хук:
Failed to call hook 'cmdChatKit' on plugin 'Kits v3.2.92' (NullReferenceException: Object reference not set to an instance of an object) at Oxide.Plugins.Kits+UI.LoadImage (Oxide.Game.Rust.Cui.CuiElementContainer& container, System.String panel, System.String img, System.String aMin, System.String aMax) [0x00000] in <352363b6d81c4b49b427dd152ad72244>:0
at Oxide.Plugins.Kits.CreateKitEntry (BasePlayer player, Oxide.Game.Rust.Cui.CuiElementContainer& element, System.String panel, System.Single[] pos, System.String entry) [0x0011b] in <352363b6d81c4b49b427dd152ad72244>:0
at Oxide.Plugins.Kits.RefreshKitPanel (BasePlayer player, System.UInt64 guiId, System.Int32 page) [0x001de] in <352363b6d81c4b49b427dd152ad72244>:0
at Oxide.Plugins.Kits.NewKitPanel (BasePlayer player, System.UInt64 guiId) [0x00022] in <352363b6d81c4b49b427dd152ad72244>:0
at Oxide.Plugins.Kits.cmdChatKit (BasePlayer player, System.String command, System.String[] args) [0x0001a] in <352363b6d81c4b49b427dd152ad72244>:0
at Oxide.Plugins.Kits.DirectCallHook (System.String name, System.Object& ret, System.Object[] args) [0x0102a] in <352363b6d81c4b49b427dd152ad72244>:0
at Oxide.Plugins.CSharpPlugin.InvokeMethod (Oxide.Core.Plugins.HookMethod method, System.Object[] args) [0x00079] in :0
at Oxide.Core.Plugins.CSPlugin.OnCallHook (System.String name, System.Object[] args) [0x000d8] in :0
at Oxide.Core.Plugins.Plugin.CallHook (System.String hook, System.Object[] args) [0x00060] in :0 - Для исправления ошибки нужно перезалить обновлённую или исправленную версию плагина.
- Или простая, но очень распространённая ошибка у новичков администраторов, возникает при загрузке плагина на сервер:
Plugin filename PluginName (2).cs must match the main class BGrade (should be PluginName.cs)
- Причина возникновения ошибки, как и её решение очень простое. Она возникает в случае повторного скачивания уже скачанного плагина, в результате этого браузер назвал плагин PluginName (2).cs. Но сервер принимает только оригинальные названия плагинов, отсюда и ошибка, решить которую можно просто переименовав плагин в оригинальному названию.
- Ещё одна ошибка которая указывает на то что плагину для работы не получает всех данных от конфигов. Точнее не найден ключ в конфигурациооных файлах.
[Oxide] 13:17 [Error] Failed to call hook 'ViewBank' on plugin 'Bank v1.0.2' (KeyNotFoundException: The given key was not present in the dictionary.)
at System.Collections.Generic.Dictionary`2[TKey,TValue].get_Item (TKey key) [0x0001e] in :0 - Ошибка возникает когда происходит несоответствие версии плагина и конфига, если для установки новой версии плагина требовалось удалить старый конфиг.
- Очень часто на серверах падает фпс и общая производительность. Причиной этому может быть спам ошибки NullReferenceException. Это очень серьёзная ошибка, так как при спаме сообщений в лог сервера размер лога может достигать десятков гигабайт (!), что может привести к заполнению всего пространства жесткого диска, и в последствии принудительному вайпу сервера. А учитывая тот факт что большинство администраторов игровых серверов не делают резервные копии сервера, отсюда выводы что из-за ошибки в консоли, вы можете потерять онлайн на сервере по причине незапланированного вайпа.
(16:50:16) | NullReferenceException: Object reference not set to an instance of an object
(16:50:16) | NullReferenceException: Object reference not set to an instance of an object
(16:50:16) | NullReferenceException: Object reference not set to an instance of an object
(16:50:16) | NullReferenceException: Object reference not set to an instance of an object
(16:50:16) | NullReferenceException: Object reference not set to an instance of an object
(16:50:16) | NullReferenceException: Object reference not set to an instance of an object
(16:50:16) | NullReferenceException: Object reference not set to an instance of an object
(16:50:16) | NullReferenceException: Object reference not set to an instance of an object
(16:50:16) | NullReferenceException: Object reference not set to an instance of an object
(16:50:16) | NullReferenceException: Object reference not set to an instance of an object
"Битая" карта
- К сожалению не всегда ошибки попадают в логи. Например, если сгенерировалась “битая” (кривая) карта, или после падения сервера карта сломалась, то во время работы или при смене на неё сервер будет падать.
- Что делать тогда? Самый верный способ это удалить файл карты, чтобы при следующем запуске сервер сгенерировал её заново. Если это не поможет, тогда можно сменить seed карты, чтобы сгенерировалась совершенно новая карта. Если падения всё ещё возникают, то можно попробовать сделать полный вайп сервера, удалив сохранения.
-
Производительность сервера Rust: как оптимизировать сервер для лучшего игрового процесса
Максимизация производительности сервера Rust: переменные, команды и метрики для владельцев серверов
Как владелец сервера Rust, вы знаете, что производительность сервера является важнейшим аспектом обеспечения бесперебойной и приятной игры для ваших игроков. Однако оптимизация производительности вашего сервера может оказаться сложной задачей. В этом руководстве мы рассмотрим различные способы повышения производительности вашего сервера Rust, включая команды/команды, регулярное обслуживание и использование инструментов мониторинга, таких как Rust-Server-Metrics.
Конвары/команды для повышения производительности сервера Rust
Rust предоставляет различные команды/команды, которые вы можете использовать для настройки производительности вашего сервера. Вот список некоторых из наиболее полезных:
- fps.limit [значение] — устанавливает ограничение на максимальное количество кадров в секунду, с которым будет работать сервер.
- entitybatchsize [значение] — устанавливает количество объектов, загружаемых на кадр.
- gc.interval [значение] — устанавливает временной интервал между циклами сборки мусора.
- gc.buffercount [значение] — устанавливает количество используемых буферов сборки мусора.
- gc.unloadingdelay [значение] — устанавливает время задержки между выгрузкой и удалением объектов.
- распада.upkeep_grief_protection [значение] – устанавливает время, через которое базы начнут разрушаться после разрушения шкафа с инструментами. Уменьшение этого показателя может ускорить процесс распада неактивных/нападавших баз.
- распада.duration_toptier [значение] – изменяет время, в течение которого этот уровень объекта существует до того, как он полностью распадется.
- распада.duration_metal [значение] – изменяет время, в течение которого этот уровень сущности существует до того, как он полностью распадется.
- распада.duration_stone [значение] – изменяет время, в течение которого этот уровень сущности существует, прежде чем он полностью распадется.
- распада.duration_wood [значение] – изменяет время, в течение которого этот уровень сущности существует до того, как он полностью разложится.
- распада.duration_twig [значение] – изменяет время, в течение которого этот уровень сущности существует до того, как он полностью распадется.
- baseridableanimal.dungtimescale [значение] — изменяет время, в которое животные какают. Уменьшение и отключение этого может немного повысить производительность.
- Chicken.population [значение] — уменьшение/отключение появления цыплят дает очень минимальный, но полезный прирост производительности за счет меньшего использования ИИ на вашем сервере.
-
Уменьшить количество животных
Изменение количества животных и существ может значительно повысить производительность в игре, поскольку экономит ресурсы сервера. Например, если вы отключите нерест цыплят, это даст больше возможностей для других действий. Это можно сделать с помощью Chicken.population «0» в консоли.
Его также можно использовать в игре, если вы являетесь , или в файле конфигурации запуска сервера. По сути, формат команды — [animal].population «[value]» , который можно использовать практически для любого существа, чтобы полностью отключить или снизить скорость его появления.
Используя эти команды/команды, вы можете настроить различные параметры для повышения производительности вашего сервера. Например, установка ограничения на максимальное количество кадров в секунду может снизить использование оборудования и предотвратить резкие скачки задержки.
Регулярное обслуживание производительности сервера Rust
Регулярное обслуживание вашего сервера Rust имеет решающее значение для обеспечения его бесперебойной работы. Вот несколько советов, которые помогут вам поддерживать производительность вашего сервера:
- Регулярно перезагружайте сервер, чтобы устранить любые утечки памяти или другие проблемы.
- Поддерживайте актуальность своих плагинов и модов, чтобы обеспечить совместимость с последней версией Rust.
- Регулярно отслеживайте производительность вашего сервера, чтобы обнаружить и устранить любые проблемы с производительностью.
- Используйте разумный размер карты, чтобы предотвратить чрезмерное использование оборудования.
Выполняя эти регулярные задачи по обслуживанию, вы можете обеспечить бесперебойную работу вашего сервера Rust и избежать распространенных проблем с производительностью.
Метрики Rust-Server для производительности Rust Server
Rust-Server-Metrics — невероятно полезный инструмент мониторинга для владельцев серверов Rust. Этот инструмент предоставляет подробные показатели и графики производительности вашего сервера, включая активность игроков, использование плагинов и многое другое. Используя Rust-Server-Metrics, вы можете быстро обнаружить и устранить любые проблемы с производительностью, а также улучшить общую производительность вашего сервера.
Чтобы использовать Rust-Server-Metrics, вам необходимо настроить экземпляр Grafana и установить плагин Rust-Server-Metrics. После установки вы можете получить доступ к подробным показателям производительности вашего сервера и отслеживать любые изменения с течением времени.