Плановые перезапуски встречаются в игровом хостинге почти повсеместно, и к ним обычно относятся как к гигиене, вроде очистки логов. На самом деле это обходной путь: что-то деградирует с течением часов, а перезапуск это сбрасывает. Это совершенно законный приём. Проблема возникает лишь тогда, когда никто не записал, что именно деградирует, потому что тогда перезапуск становится несущей опорой, интервал ползёт от еженедельного к ночному и к раз в шесть часов, а настоящая неисправность так и не находится.
Так что вопрос не в том, «нужен ли мне ночной перезапуск?», а в том, «какие есть доказательства, что перезапуск помогает, и сколько его нужно?» Эта статья о том, как ответить на это по графикам, которые у вас уже есть: что перезапуск действительно сбрасывает, как отличить утечку от плато, какую частоту оправдывают данные и как проводить перезапуск, чтобы никто не потерял работу. Механика составления расписания - строка cron, порядок задач, задержки - описана в статье плановые задачи, которые стоит иметь.
Что перезапуск на самом деле сбрасывает#
Перезапуск выбрасывает процесс и запускает новый из тех же файлов. Это всё, и список того, что он лечит, прямо отсюда следует.
| Симптом | Помогает ли перезапуск? | Почему |
|---|---|---|
| Память растёт день ото дня | Да | Утёкшие объекты уходят вместе с процессом |
| Фрагментация кучи, медленная сборка мусора | Да | Новая куча начинается чистой |
| Накопление сущностей в мире | Частично | Выброшенные предметы исчезают; рамки и сундуки - нет |
| Загруженные чанки или зоны, которые не выгружаются | Да | Заново загружается только то, чего касаются игроки |
| Плагин, удерживающий мёртвые соединения с базой данных | Да | Пул пересоздаётся |
| Диск забивается логами или старыми мирами | Нет | Файлы переживают перезапуск |
| Повреждённый мир или файл сохранения | Нет | Он загружается снова, таким же сломанным |
| Неверное значение в конфигурации | Нет | Читается снова, применяется снова |
| Лаг от редстоун-машины одного игрока | Нет | Она в мире, а не в процессе |
| Раздувшаяся база данных или отсутствующие индексы | Нет | База данных - это другая служба |
Середина этой таблицы - место, где живёт большая часть честной пользы. Низ - это то, куда люди всё равно ставят перезапуски, и поэтому расписание, которое «немного помогает», нередко оказывается не делающим ничего, кроме помех людям. Если ваша жалоба в том, что сервер тормозит в пик и в порядке в 04:00, то перезапуск в 05:00 не решает ничего - читайте лучше почему падает TPS и что делать.
Как доказать, что он нужен: читайте график памяти#
Панель рисует память, CPU и диск относительно лимитов тарифа. Этот график отвечает на вопрос напрямую, если смотреть на него в масштабе дней, а не минут.
Перезапустите сервер, затем запишите значение памяти в четырёх точках и сравните форму:
Server A Server Bafter restart 1.9 GB after restart 1.9 GB+1 hour 2.6 GB +1 hour 2.4 GB+6 hours 3.1 GB +24 hours 3.4 GB+24 hours 3.2 GB +48 hours 4.6 GB+72 hours 3.2 GB +72 hours 5.8 GBСервер A заполняется и выходит на плато. Это не утечка, это кэш, делающий свою работу, и ночной перезапуск не даёт ничего, кроме ночной помехи. У сервера B нижняя граница растёт каждый день и в конце концов упрётся в потолок; это утечка, и перезапуск - законная временная мера, пока её не найдут.
Следить нужно за нижней границей, а не за пиком. Пики движутся вместе с числом игроков и значат мало. Признак - нижняя граница, которая каждое утро выше, чем была накануне утром. Другие формы на том же графике разобраны в статье как читать график нагрузки сервера.
Для Minecraft добавьте второе измерение, не связанное с памятью: /mspt в Paper сообщает, сколько длится тик, и его динамика за дни показывает, деградирует ли симуляция, а не только куча. Если оно неуклонно растёт, профилирование найдёт причину минут за десять - об этом статья как читать отчёт spark. Для приложения на Node или Python эквивалент - наблюдение за резидентной памятью относительно лимита, подробности в статье лимиты памяти Node простыми словами.
Чистая остановка и kill - не одно и то же#
Именно это делает перезапуски бесплатными или дорогими, и это незаметно до первого раза, когда оно вам обойдётся дорого.
- Stop и Restart просят сервер завершиться. У процесса есть возможность сохраниться, сбросить логи и закрыть файлы. Для игры, чей мир живёт в памяти, это сохранение - вся суть.
- Kill не спрашивает. Процесс исчезает. Всё, что не записано на диск, пропадает.
- Остановка из-за нехватки памяти ближе к kill. На лимите памяти контейнер останавливается ядром и запускается чистым, а не остаётся в свопе, что сохраняет здоровье машины и скорость других серверов, но с точки зрения игры это незапланированная остановка. Всё, что мир держал в памяти в тот момент, теряется.
Этот последний пункт - самый сильный довод в пользу расписания перезапусков на сервере с настоящей утечкой. Дело не в производительности; дело в том, кто выбирает момент. Перезапуск в 05:00 с сохранением перед ним не стоит ничего. Тот же сервер, упёршийся в потолок в 21:30, стоит всем последнего интервала сохранения, а у Valheim по умолчанию это тридцать минут.
Как часто, и какие данные оправдывают каждую частоту#
Подбирайте интервал по тому, что показал график, а не по тому, что делают другие серверы.
| Частота | Оправдана, когда | На что смотреть |
|---|---|---|
| Никогда | Память выходит на плато, время тика ровное всю неделю | Самоуспокоенность; перепроверяйте после каждого изменения модов |
| Раз в неделю | Медленное нарастание, не достигающее лимита за семь дней | Делайте в самый тихий час самого тихого дня |
| Каждую ночь | Нижняя граница растёт ежедневно, либо известная утечка в моде | Интервал, который незаметно укорачивается со временем |
| Дважды в день | Серьёзная утечка, которую нельзя исправить и на которую нельзя нарваться | Это обратный отсчёт, а не расписание |
| Каждые несколько часов | Ничего | Ваша проблема - краш, а не фрагментация |
Порог, о котором надо честно сказать: если серверу нужен перезапуск чаще раза в сутки, чтобы оставаться пригодным, перезапуск - не лечение. Либо тариф слишком мал для того, что на нём работает, либо что-то сломано. Причины разделяет статья почему ваш игровой сервер постоянно перезапускается, и ответ нередко в том, что лимит памяти и заданная куча борются друг с другом.
Еженедельный перезапуск недооценён. Большой сервер с модами, медленно нарастающий, вполне проживёт семь дней без проблем, а одно прерывание в неделю гораздо проще уложить в привычки сообщества, чем семь.
Перезапуск без потерь для кого-либо#
Последовательность важнее времени. Перезапуск, пришедший без предупреждения посреди боя с боссом, стоит вам больше доброй воли, чем вернувшаяся память.
- Предупредите дважды. За пятнадцать минут и за пять, в игре. Опубликуйте расписание в Discord один раз, чтобы это не было новостью каждую ночь.
- Принудительно сохраните перед остановкой.
save-all flushдля Minecraft,Saveчерез RCON для Palworld,saveworldдля 7 Days to Die. Игры без консольной команды - среди них Valheim - полагаются на то, что это сделает чистая остановка, и именно поэтому перезапуск должен быть Stop, а не Kill. - Делайте бэкап до перезапуска, а не во время него. Бэкап останавливающегося сервера - это бэкап останавливающегося сервера, и именно этот архив вы достанете, если в момент перезапуска что-то сломается, - что в нём должно быть, описано в статье бэкапы, которые действительно восстанавливаются.
- Оставьте паузу. Шестьдесят секунд между сохранением и остановкой и между остановкой и всем, что следует за ней.
- Выберите тихий час и избегайте с 02:00 до 03:00, когда переход на летнее время заставляет задачу выполниться дважды или ни разу.
Затем проверьте первый перезапуск вручную. Проследите за консолью на протяжении всей последовательности один раз, убедитесь, что строка сохранения появляется раньше строки остановки, и убедитесь, что сервер вернулся. Расписания отказывают молча, и ночь, когда вы обнаруживаете, что ваше три недели убивает сервер без сохранения, - плохая ночь. Как выглядят эти строки, показано в статье чтение консоли.
Что скрывает ночной перезапуск#
Если перезапуск - несущая опора, что-то под ним сломано. Список обычных подозреваемых короток, и у каждого есть способ проверки.
- Утечка в моде или плагине. Возвращайте по одному подозреваемому после перезапуска и следите за 24-часовой нижней границей. Утомительно, эффективно, и короткого пути нет.
- Накопление сущностей. Рамки, стойки для брони, вагонетки и фермы мобов хранятся в мире и переживают перезапуски; очищаются выброшенные предметы и загруженные вокруг них чанки. Посчитайте сущности, прежде чем винить память.
- Загрузчики чанков и постоянно загруженные области. Сервер, на котором двадцать загрузчиков чанков заставляют работать далёкие механизмы, платит за это каждый тик, а не только после трёх дней.
- Логи, заполняющие диск. Перезапуски не освобождают диск. Сервер, который неделю ведёт себя хорошо, а потом начинает капризничать, - часто просто тот, у которого кончается место, - проверьте диск на том же графике, что и память. Сторона хранения описана в статье логи, которые стоит хранить.
- База данных, которую никогда не обслуживали. Раздувание таблиц и отсутствующие индексы медленно ухудшаются, и перезапуск игрового сервера их не касается. Для PostgreSQL это vacuum и раздувание; для всего остального это как минимум взгляд на лог медленных запросов.
- Моды, которые никогда не были совместимы. Набор, собранный из трёх версий, будет сбоить по собственному расписанию. Профилактика - как содержать сервер с модами в чистоте.
Если ночной перезапуск - несущая опора, запишите, что он скрывает. Эта запись и есть настоящий баг-репорт, и только она когда-либо позволяет расписание отключить.
Обновления - это перезапуски с причиной#
Другое законное применение перезапуска - что-то применить. Обновление игры, обновление мода, изменение конфигурации, читаемое только при запуске, новая версия Java. Это не накладные расходы на обслуживание; это и есть цель.
Правила здесь отличаются от случая с ночным перезапуском, и стоит их разделить:
- Сначала бэкап, и заблокируйте его. Не ночная ротация, а намеренный бэкап, снятый непосредственно перед изменением и заблокированный, чтобы не выпасть из ротации. Если обновление пойдёт не так, этот архив - путь назад, а проверка восстановления до того, как оно понадобится - способ узнать, что он работает.
- Не включайте автообновление на сервере с модами в день патча. Каждый патч игры ломает моды, пока авторы не подтянутся. Отключите обновление, подождите, затем обновляйтесь осознанно - что делать, когда обновление мода всё ломает.
- Объявляйте это как обновление, а не перезапуск. Люди терпимо относятся к простою, который понимают. «Обновляемся до 1.21.4, вернёмся через пятнадцать минут» - совсем другое сообщение, чем внезапно исчезнувший сервер.
- Для приложений перезапуск - это деплой. Та же последовательность, с проверками здоровья - см. деплой без простоя на небольшом сервере.
Когда автоматические перезапуски мешают#
На любой управляемой платформе есть и второй источник перезапусков: наблюдатель за крашами. Наш опрашивает каждые две минуты сервер, который ушёл в офлайн или у которого аптайм пошёл назад, и возвращает его. Перезапуски, которые вы запросили сами, не считаются. Три незапланированных перезапуска за час выводят предупреждение на странице сервера и автоматически открывают тикет; шесть приостанавливают сервер, что звучит жёстко, пока вы не понаблюдаете за сервером, падающим по кругу целый день.
У такого устройства есть практическое следствие. Сервер, который падает при запуске, будет перезапущен, упадёт, будет перезапущен, и счётчик растёт. Правильная реакция - остановить его намеренно и прочитать последние сорок строк лога перед крашем, а не позволять циклу продолжаться, пока вы ищете причину. Остановленный сервер - не аварийная ситуация; зацикленный - это шум, погребающий нужную вам строку.
Это также значит, что ваши плановые перезапуски для этого счётчика невидимы, так что ночное расписание никогда не вызовет предупреждения. Если вы всё же видите предупреждение о трёх перезапусках за час, оно настоящее: что-то завершается само по себе, и никакое расписание этого не исправит.
FAQ#
Нужен ли мне ночной перезапуск вообще?
Только если так говорит график. Измерьте нижнюю границу памяти за три дня; если она выходит на плато, пропустите расписание и проверьте снова после следующего изменения модов или плагинов. Еженедельный перезапуск - разумное умолчание для всего с модами, а простой ванильный сервер со стабильным числом игроков вполне может не нуждаться ни в одном.
В какое время его запускать?
В самый тихий для ваших игроков час, избегая с 02:00 до 03:00 из-за перехода на летнее время. Для большинства европейских сообществ это с 04:00 до 06:00. Проверьте собственные часы пик, а не копируйте умолчание: у сервера, игроки которого живут в другом месте, и тихий час другой.
Исправит ли перезапуск лаг?
Только лаг, вызванный чем-то, что накапливается в процессе. Лаг, появляющийся, когда заходят двадцать человек, - проблема мощности или конфигурации, и он вернётся в течение часа. Быстрая проверка: если сервер быстр в 04:00 и медлителен в 20:00, перезапуск в 05:00 ничего не изменит.
Теряется ли прогресс при перезапуске?
Чистая остановка сначала сохраняет, так что нет. Kill или остановка из-за нехватки памяти теряют всё после последнего сохранения, а для некоторых игр это до получаса. Всегда используйте Stop или Restart, ставьте перед ними команду сохранения и держите интервал сохранения самой игры коротким на сервере, близком к лимиту памяти.
Что делать раньше: перезапуск или бэкап?
Сначала бэкап, потом перезапуск. Архив должен быть от устоявшегося, сохранённого мира, а не от мира посреди выключения. Полный порядок - предупредить, сохранить, заархивировать, перезапустить - в последовательности расписания из статьи плановые задачи, которые стоит иметь.
Можно ли перезапускать только когда памяти много, а не по таймеру?
Не через расписание cron, которое знает только время. На практике таймер достаточно близок: выберите интервал короче, чем нужно, чтобы дойти до лимита, а необходимость более частого считайте сигналом либо устранить утечку, либо перейти на тариф выше. Смена тарифа не пересоздаёт сервер, так что лимит памяти можно поднять на том сервере, который у вас уже есть.




Комментарии
Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.