Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

FileRegionCache или полный п******

Shevchik

Старожил
Пользователь
Баллы
173
Имя в Minecraft
_Shevchik_
Начнём издалека:
Вы наверняка много раз видели надпись saving world/Overworld при выключении сервера. Вас никогда не удивляло почему оно так долго висит хотя обычные сохранения мира заканчиваются мгновенно?
Так вот это он самый, сохраняется, сволочь. Итак что же делает этот самый кэш? Из названия легко становится понятно что он кэширует файлы регионов (те самые r-бла-бла.mca).

Вот только есть с ним одна нехилая проблема, а точнее целый вагон и ещё маленькая тележка.
На самом деле тут всего 3 пункта, зато каких:
1. FileRegionCache сохраняется на диск только при обычном выключении сервера, и поэтому резкое отключение питания сервера откатит вашу карты в каменные века. Более того, ни один релизный плагин автосохранений в текущий момент не сохраняет этот кэш, так что жопа...(В своём я уже пофиксил, но когда он доберётся до релиза это хз) Короче перезагружайте свой сервер хоть раз в день, ну или использовать /save-all flush.
2. FileRegionCache кэширует в себе до 256 файлов одновременно, учитывая что каждый файл в среднем весит 11 метров, то... Ну короче теперь вы знаете куда сервер девает свою память... (немного простой арифметики подсказывает что в худшем случае у вас ни на что пропадает 3 гига памяти).
3. Ежечасные бэкапы которые делают всякие нубы, хаха, не работают, потому что изменения в мире не пишутся на диск.

Зачем же этот говнокэш нужен?
А вот зачем: чтение с диска не такая быстрая операция и поэтому без этого кеша играть в одиночке было бы мучительно больно. А так майнкрафт прогружает 4 регион файла при старте, что даёт примерно 100 быстро грузящихся чанков во все стороны. Правда если так вспомнить то в ведре и кране чанки прогружаются асинхронно, то этот кэш там нахрен не нужен, но все ещё есть так как всем лень вырезать его каждый раз. В итоге это говно существует только потому что когда-то моджанги не осилили многопоточность и припили костыль...
 
Последнее редактирование:
Что мы получаем как обычно? Мк кривое г**** которое реализовано на костылях с горстью болтов, верно?
 
Поделюсь своим опытом держания сервера. Серверный каталог выглядит следующим образом:
  • backups/... — все бекапы работающих серверов
    • backups-<название сервера №1>/... — бекап конкретного сервера
    • backups-<название сервера №2>/...
    • и т.п.
  • jars/... — каталог с серверными ядрами
    • Spigot_v1.7.10.b3333.jar
    • и т.п.
  • servers/... — папка с серверами
    • server-<название сервера №1>/... — домашний каталог сервера
    • server-<название сервера №2>/...
    • ...
    • worlds/ — общий для серверов каталог с мирами
      • SomeWorldName
      • AnotherWorldName
  • Где-то в папке веб-сервера:
    • <название сервера №1>.домен.ru — каталог с картой Dynmap.
Таким образом из папки каждого сервера мы убрали наиболее тяжёлые элементы: отрендеренную веб-карту, сами миры и серверный .jar-файл. Remote ToolKit настроен на рестарт серверов от 12 до 3 часов, в зависимости от сервера. На каждом из серверов работает MineBackup, который регулярно создаёт бекапы его сервера: zip-ует с уровнем сжатия 0 все миры сервера глубокой ночью, zip-ует корневую папку сервера с уровнем сжатия 9 каждые несколько часов, держа достаточное количество бекапов для любой экстренной ситуации. Плюс пинает сервер на save миров каждые минут 15.

Дальше, имея несколько VPS/VDS, можно настроить мгновенную синхронизацию всего домашнего каталога серверов между ними через btsync. Главное, чтобы часы на всех шли синхронно и не запускать один и тот же сервер на нескольких машинах одновременно. Бекапы, естественно, можно в список игнорирования, их достаточно держать на каждой машине локально.
 
Последнее редактирование:
Поделюсь своим опытом держания сервера. Серверный каталог выглядит следующим образом:
  • backups/... — все бекапы работающих серверов
    • backups-<название сервера №1>/... — бекап конкретного сервера
    • backups-<название сервера №2>/...
    • и т.п.
  • jars/... — каталог с серверными ядрами
    • Spigot_v1.7.10.b3333.jar
    • и т.п.
  • servers/... — папка с серверами
    • server-<название сервера №1>/... — домашний каталог сервера
    • server-<название сервера №2>/...
    • ...
    • worlds/ — общий для серверов каталог с мирами
      • SomeWorldName
      • AnotherWorldName
  • Где-то в папке веб-сервера:
    • <название сервера №1>.домен.ru — каталог с картой Dynmap.
Таким образом из папки каждого сервера мы убрали наиболее тяжёлые элементы: отрендеренную веб-карту, сами миры и серверный .jar-файл. Remote ToolKit настроен на рестарт серверов от 12 до 3 часов, в зависимости от сервера. На каждом из серверов работает MineBackup, который регулярно создаёт бекапы его сервера: zip-ует с уровнем сжатия 0 все миры сервера глубокой ночью, zip-ует корневую папку сервера с уровнем сжатия 9 каждые несколько часов, держа достаточное количество бекапов для любой экстренной ситуации. Плюс пинает сервер на save миров каждые минут 15.

Дальше, имея несколько VPS/VDS, можно настроить мгновенную синхронизацию всего домашнего каталога серверов между ними через btsync. Главное, чтобы часы на всех шли синхронно и не запускать один и тот же сервер на нескольких машинах одновременно. Бекапы, естественно, можно в список игнорирования, их достаточно держать на каждой машине локально.
От этих бэкапов толку нахрен нет потому что в реальности изменения в мире на диск не дампятся до перезагрузки сервера, либо пока количество открытых файлов не станет > 256.
 
От этих бэкапов толку нахрен нет потому что в реальности изменения в мире на диск не дампятся до перезагрузки сервера, либо пока количество открытых файлов не станет > 256.
У меня достаточно частые рестарты, и бекапы меня на самом деле выручали из большой тёмной ж.
 
это говно существует только потому что когда-то моджанги не осилили многопоточность и припили костыль...
Репортить на баг-трекер моянгов 1.8 уже поздно, да?
 
Кроме тех которые юзали автосохранение в NoLagg.
Есть ещё команда /save-all flush кстати. Куда лучше использовать её чем nolagg(который на спайготе несёт больше проблем чем пруфита).
И вообще в майне целая куча таких костылей, чего только стоит генерация мира.

Собственно надо бы запилить рассказ почему чанки нельзя генерить не в главном потоке. А главное что блин на самом деле не так сложно сделать асинхронную генерацию чанков.

Ещё наверное стоит рассказать про замечательный механизм обработки состояния игрока который отрабатывает при каждом пакете Player пришедшего с клиента.
 
Последнее редактирование:
Про последнее расскажи, интересно. Команду не трудно добавить в ASW или скриптом, чтобы по интервалу выполнялась.
 
Про последнее расскажи, интересно. Команду не трудно добавить в ASW или скриптом, чтобы по интервалу выполнялась.
Костыли в обработке игроков это вообще отдельная тема. Может и запилю ещё пару статей о костылях ближе к выходным.
 
Костыли в обработке игроков это вообще отдельная тема. Может и запилю ещё пару статей о костылях ближе к выходным.
Можно запилить eng-вариант на minecraftforum'е, там возможно сразу труъ девелоперы фикс-патчи запилят
 
А если на форуме баккита / спайгота написать? Может они пофиксят.
 
А если на форуме баккита / спайгота написать? Может они пофиксят.
Не пофиксят. Убирание этого кэша сломает многие скрипты бэкапа. На никсах ещё переживут, там журналируемые фс, да и жаба обычно файл атомарно записывает, а вот на вендах всё может закончится битым бэкапом.
 
Minecraft станет многопоточным когда нибудь?
Ты же понимаешь, что в паблик его вряд ли выложат. Слишком большая работа, чтобы кто-то делал ее бесплатно, а потом поддерживал проект.
 
Ты же понимаешь, что в паблик его вряд ли выложат. Слишком большая работа, чтобы кто-то делал ее бесплатно, а потом поддерживал проект.
Вот только кому-то придётся его разработать, и очень, очень скоро. Смотри последнюю новость баккита.
 
Вот только кому-то придётся его разработать, и очень, очень скоро. Смотри последнюю новость баккита.
Все... приехали. Прощайте сервера. Надо хоть статью тут разместить, а то никто не знает.
А подобное уже разрабатывали, но не поделятся (в комментах срач по этому поводу) - http://habrahabr.ru/post/157921/
 

Поделиться этой страницей

Назад
Верх