Rust:Рекомендации по улучшению стабильности работы сервера

Материал из SurvivalHost Wiki
Перейти к навигации Перейти к поиску

Введение


Проблема падений и лагов может возникнуть неожиданно и внезапно у любого сервера. Поэтому разберемся более подробней в статье, написанной для того, чтобы вы смогли самостоятельно настроить сервер для бесперебойной работы, исключить возможность падений и зависаний вашего сервера. Статья написана скорее для новичков кто впервые сталкивается с администрированием игрового сервера.

Ниже приведены примеры (причины) падания сервера.

    * DDoS атаки, эксплоиты
    * Битая карта
    * Конфликты плагинов
    * Ошибки в работе плагинов
    * Взлом аккаунта, подбор RCON пароля
    * Проблемы с запуском сервера
    * Ошибки в коде самого сервера


Теперь рассмотрим каждую проблему:

DDoS атаки, эксплоиты

Во время атаки сервер становится недоступным для подключения игроков и программ управления (если DDoS-защита не смогла сдержать атаку). Также сервер не управляем в панели, не отображается его статус и не работает фтп. Фактически ваш сервер, и другие сервера на этой же физической машине (тот-же IP-адрес), которую атакуют, запущен и работает исправно, просто к нему нету доступа. Чтобы доступ к серверу возобновился, остаётся только ждать завершения атаки, также возможно приобрести более надёжную защиту от DDoS-атак, если это целесообразно для вашего сервера и если хостинг предоставляет такую услугу.

Также почти всегда сервера имеют уязвимости (експлоиты). Это обычные ошибки или недоработки в коде сервера, которые допускают разработчики при написании кода. Людям свойственно допускать ошибки, код пишут не роботы ;) Учтите что 100% защиты от атак и експлоитов нет, как и на любом другом хостинге. Так как есть эксплоиты от которых нет защиты абсолютно ни у кого, и на любую защиту от атаки будет более сильная или умная атака.

Отсутствие ошибок в работе плагинов

Вычислить плагины, которые являются причиной сбоев в работе сервера иногда нелегко. Сервера падают не записывая в лог причину падений, крашлоги также не создаются. Остаётся только положиться на логи мода Umod или лог консоли во время поиска проблемы.


Конфликт плагинов

Есть много плагинов, у которых предназначение одно и тоже. Первый плагин не дает сделать свое предназначение и наоборот, отсюда конфликт — падение производительности, спам ошибок в консоль или падение сервера. Пример: допустим если установить две системы бана или даже 3 системы бана, или несколько систем управления лутом. Может вам смешно. Но у некотрых "пользователей" такое есть.

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

Посмотрите в лог-файлы на наличие ошибок. Зайдя туда вы может увидить примерно это:

[Oxide] 10:32 [Warning] Calling hook OnNpcPlayerTarget resulted in a conflict between the following plugins: BotSpawn - True (Boolean), ZombieHorde (False (Boolean))

Это значит что два плагина BotSpawn и ZombieHordedamager используют один и тот же хук 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 BGrade (2).cs must match the main class BGrade (should be BGrade.cs)

Причина возникновения ошибки, как и её решение очень простое. Она возникает в случае повторного скачивания уже скачанного плагина, в результате этого браузер назвал плагин BGrade (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 <e1a80661d61443feb3dbdaac88eeb776>: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 карты, чтобы сгенерировалась совершенно новая карта. Если падения всё ещё возникают, то можно попробовать сделать полный вайп сервера, удалив сохранения.


Взлом Вашего аккаунта, RCON взлом

Доступ по RCON - это полный доступ к серверу (кроме FTP). Немало серверов ломаются из-за взлома RCON. При взломанном RCON у вас будут прописывать админки и творить, что хотят в том числе и изменять настройки сервера которые могут привести к зависанию. Для того, чтобы этого не было устанавливайте сложный пароль. Сложный пароль можете сгенерировать, например, на passwordsgenerator.net .

Резервное копирование сервера

Для сохранения данных сервера необходимо делать его резервное копирование. Благодаря этому вы можете сохранить время и, возможно, деньги потраченные на покупку плагинов в случае, если что-то случится с вашими файлами. Поломки случаются даже на хостингах, и 100% гарантии что ваши данные будут в безопасности нет. Да и для таких целей есть другие сервисы, цель игровых хостингов - содержать сервера без лагов с максимальным аптаймом. Это не всегда гарантирует сохранность ваших данных при поломках оборудования, хотя оно и бывает очень редко. Копировать данные с сервера вы можете используя FTP клиенты. Также есть специальные программы, которые за вас могут по расписанию скачивать данные прямо с игрового сервера по FTP на ваш компьютер, или в облако Google-диска, например.

Ничего лишнего

Иногда в папке сервера скапливается много ненужных файлов, которые нужно удалять. Чаще всего это логи мода Umod/Oxide. По этому при каждом вайпе желательно удалять полностью папку logs, в которой лежат эти файлы. После вайпа они всё равно не нужны. Также следует поступать с конфигами и файлами данных плагинов. Если вы не используете плагин, то незачем оставлять его конфиг в папке configs, ведь при редактировании других конфигов вы будете путаться установлен у вас плагин от этого конфига или нет. Лучше всего когда убираете с сервера плагин - сделайте в папке plugins отдельную папку и перемещайте его туда. Также и для конфигов, lang-файлов и data-файлов, если требуются. Во время вайпов карты достаточно изменить зерно (seed) карты, но при этом в папке сервера останется старая карта и её сохранение. Желательно также удалять их, это уменьшит размер архива для создания резервной копии.

Работает - не трогай!

Это, пожалуй, основное из правил держателей серверов. Часто проблемы возникают после каких-то изменений на сервере. Также часто решить эти проблемы можно отменив эти изменения. Если вы настроили плагин, по вашему мнению хорошо, и он работает без ошибок в консоли и падений, то не нужно гнаться за тем чтобы как можно быстрее обновлять свои плагины к самым новым версиям. Как показывает опыт, новое не всегда лучшее. Иногда даже плагины годичной давности работают на серверах, где новая версия этого же плагина не работает. Не говоря уже о том, что даже из-за установки новой версии плагина, сервер может начать падать или сыпать ошибки в консоль спустя некоторое время. Также для стабильной работы сервера не стоит нагружать его плагинами. Если ваш сервер работает без сбоев это хорошо, но учтите что чем больше плагинов - тем больше проблем вы можете получить позже.