1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Обсудим [Spigot 1.11.2] Crash сервера при заполнении ОЗУ

Тема в разделе "Помощь", создана пользователем XboxPro, 8 фев 2017.

  1. Автор темы
    XboxPro

    XboxPro Активный участник

    Баллы:
    61
    Имя в Minecraft:
    XboxProOne
    Здравствуйте! Прошу помощи или совета.
    Немного о сервере
    Сервер Spigot 1.11.2 работает под Ubuntu 14.04 (64bit)
    Выделено 16Gb ОЗУ (Работает под Hyper-V)
    Версия Java: 1.7.0_121

    Во время прогрузки новой карты с помощью плагина WorldBorder
    (/wb fill 80) происходит crash сервер при заполнении всей доступной серверу ОЗУ -Xmx12G
    Из плагинов установлены только WorldBorder и Dynmap

    Используя советы с темы: http://rubukkit.org/threads/kak-sdelat-server-otkazoustojchivym.37655/
    Участника форума InterVi
    И это работало на CraftBukkit 1.9.4, но на Spigot 1.11.2 ОЗУ забивается и сервер крашится.

    мой start.sh:
    Код:
    java -Xmx12G -Xms4G -XX:MaxPermSize=512M -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:parallelGCThreads=20 -jar spigot.jar nogui

    Используя документацию Oracle Java и Google поиск - пытался найти решения самостоятельно.
    https://docs.oracle.com/cd/E40972_01/doc.70/e40973/cnf_jvmgc.htm
    http://www.oracle.com/technetwork/articles/java/vmoptions-jsp-140102.html
    https://habrahabr.ru/post/269863/

    Подскажите пожалуйста, кто смог разобраться, что я могу предпринять для разгрузки ОЗУ.

    ----
    Дополнение (может кому пригодится)
    Переехал на Ubuntu Server 16 (чистая установка) и версию Java:
    java version "1.8.0_121"
    Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
    Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

    Используя советы из статей
    https://forums.spongepowered.org/t/optimized-startup-flags-for-consistent-garbage-collection/13239
    https://github.com/Brettflan/WorldBorder/issues/75
    и документацию Java 8
    http://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

    удалось частично оптимизировать работу Spigot 1.11.2 с плагином WorldBoard
    также я выставил значение авто-сохранения мира /wb fillautosave [seconds]
    Заметил, что во время частого сохранения происходит заполнение ОЗУ и изменил параметр на 3600 сек (1час)

    из моего start.sh
    Код:
    java -Xms2G -Xmx10G -XX:+UseLargePagesInMetaspace -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:MaxGCPauseMillis=100 -XX:+DisableExplicitGC -XX:TargetSurvivorRatio=90 -XX:G1NewSizePercent=50 -XX:G1MaxNewSizePercent=80 -XX:InitiatingHeapOccupancyPercent=10 -XX:G1MixedGCLiveThresholdPercent=50 -XX:+AggressiveOpts -XX:+AlwaysPreTouch -jar spigot.jar nogui
    -XX:+UseLargePagesInMetaspace работает в Java 8

    Оставлю тестироваться на ночь
     
    Последнее редактирование: 8 фев 2017
  2. Автор темы
    XboxPro

    XboxPro Активный участник

    Баллы:
    61
    Имя в Minecraft:
    XboxProOne
    Dynmap удалял, но сервер крешился. И сейчас не использую его.
    Дописал дополнение в шапке темы
    Переехал на версию Java:
    java version "1.8.0_121"
    За ночь сервер не крашнулся хотя ОЗУ забивается до конца и в N-промежуток времени появляется сообщение о освобождении памяти.
    Available memory is very low, task is pausing. A cleanup will be attempted now, and the task will automatically continue if/when sufficient memory is freed up.
    Alternatively, if you restart the server, this task will automatically continue once the server is back up.

    но даже при /wb fill 500 карта (wb set 50000 будет погружаться около 2-х недель хотелось бы побыстрее), пробую уже на физическом сервере под Windows Server 2008 с /wb fill 1000
    java -Xms6G -Xmx24G ...

    подцепил Zabbix для мониторинга
     
  3. Will Orion Z

    Will Orion Z Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    willorion
    Оптимизированная java машина для серверов (облачных):
    http://zulu.org/download/
    Качаешь под ubuntu и ставишь.
    sudo apt install ./имяпакета
    И удаляешь старый openjdk:
    sudo apt purge openjdk-8-jdk
    sudo apt -purge autotemove

    Затем меняешь ядро на форк спигота. Развивается медленно, но работает стабильно (последний раз пользовался им на 1.9.4)
    Билд под 1.11:
    https://ci.techcable.net/job/TacoSpigot/86/artifact/build/TacoSpigot.jar
     
  4. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    1000 это же колво чанков в секунду.
    Или нет?
    Для прогрузки чанков и 12гб маловато. У меня она и 28гб кушала.
    Ставь 100. Это вроде оптимальное колво чанков.
    Попробуй эти флаги
    https://aquifermc.org/threads/optim...kes-fix-tps-improve-performance.101/#post-822
     
  5. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Обычная java, только удалили несколько системных драрников. Быстрее оно не станет работать. А вот что то отвалится может, из за их отсутствия.
     
  6. Автор темы
    XboxPro

    XboxPro Активный участник

    Баллы:
    61
    Имя в Minecraft:
    XboxProOne
    Спасибо, попробую.

    Пост с этого форума, уже читал но тут (использую эти флаги к java8):
    https://forums.spongepowered.org/t/optimized-startup-flags-for-consistent-garbage-collection/13239

    при wb fill 100 память все равно заполняется до отказа, но только медленнее.
    screenshot из Zabbix первая волна - wb fill 1000, сейчас вторая ползет - wb fill 100
    [​IMG]

    не понятно почему не работают флаги java8 которые должны "выносить мусор" разгружая ОЗУ
    ведь это работало у меня на CraftBukkit 1.9.4
     
  7. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Значит где то утечка памяти идет, в ядре или плагинах.
     
  8. Автор темы
    XboxPro

    XboxPro Активный участник

    Баллы:
    61
    Имя в Minecraft:
    XboxProOne
    из плагинов только WorldBorder, ядро спигота (spigot-1.11.2-R0.1-SNAPSHOT) собирал через BuildTools, как предложенный вариант участником форума InterVi, так как загруженное с https://getbukkit.org/spigot так и не смог запустить из за имеющейся ошибки при запуске сервера:
    java.lang.NoClassDefFoundError: org/apache/logging/log4j/core/config/ConfigurationFactory$Factory
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:195)
    at org.apache.logging.log4j.core.config.plugins.PluginManager.decode(PluginManager.java:241)
    at org.apache.logging.log4j.core.config.plugins.PluginManager.collectPlugins(PluginManager.java:152)
    at org.apache.logging.log4j.core.config.plugins.PluginManager.collectPlugins(PluginManager.java:130)
    at org.apache.logging.log4j.core.pattern.PatternParser.<init>(PatternParser.java:116)
    at org.apache.logging.log4j.core.pattern.PatternParser.<init>(PatternParser.java:102)
    at org.apache.logging.log4j.core.layout.PatternLayout.createPatternParser(PatternLayout.java:183)
    at org.apache.logging.log4j.core.layout.PatternLayout.<init>(PatternLayout.java:115)
    at org.apache.logging.log4j.core.layout.PatternLayout.createLayout(PatternLayout.java:219)
    at org.apache.logging.log4j.core.config.DefaultConfiguration.<init>(DefaultConfiguration.java:51)
    at org.apache.logging.log4j.core.LoggerContext.<init>(LoggerContext.java:63)
    at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.locateContext(ClassLoaderContextSelector.java:217)
    at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:114)
    at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:81)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:83)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:34)
    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:387)
    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:322)
    at net.minecraft.server.v1_11_R1.MinecraftServer.<clinit>(MinecraftServer.java:53)
    at org.bukkit.craftbukkit.Main.main(Main.java:186)
    Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.core.config.ConfigurationFactory$Factory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:356)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:348)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:347)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 21 more
    Caused by: java.util.zip.ZipException: invalid LOC header (bad signature)
    at java.util.zip.ZipFile.read(Native Method)
    at java.util.zip.ZipFile.access$1400(ZipFile.java:56)
    at java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:682)
    at java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.java:415)
    at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
    at sun.misc.Resource.getBytes(Resource.java:124)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:437)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:64)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:354)
    ... 27 more

     
  9. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Xms с Xmx должны быть равны. И да, снимай все флаги, оставляй только G1GC, AlwaysPreTouch. И да последнее ядро не будет отгружать чанки если тик сервера уходит полностью на что-то ещё, так что отгружать их надо силой.
     
    Последнее редактирование: 9 фев 2017
  10. Автор темы
    XboxPro

    XboxPro Активный участник

    Баллы:
    61
    Имя в Minecraft:
    XboxProOne
    Значит именно флаг -XX:+AlwaysPreTouch заполняет всю указанную в Xms, Xmx ОЗУ и после работает с ней.
    Судя по мониторингу из Zabbix идет очистка мусора и новое заполнение. Оставлю до завтра для тестирования на crash. Указал wb fill 200.

    Не совсем понятно про "так что отгружать их надо силой"
     
  11. caySpryt

    caySpryt Активный участник Пользователь

    Баллы:
    76
    Извращенци... у меня на на 4 гига за ночь норм прогружалась карта, только немного подлагивало, но и игроки играли.. Поставь clearlagg и в нем настрой ограничение нагрузки.
     
  12. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    chunk.unload(true).
     
  13. Автор темы
    XboxPro

    XboxPro Активный участник

    Баллы:
    61
    Имя в Minecraft:
    XboxProOne
    Заново установил чистую Ubuntu 16.04 (в прошлой осталось много мусора)
    oracle-java8 от webupd8team и обновил пакетом zulu8 (http://zulu.org)
    получилось так:
    openjdk version "1.8.0_121"
    OpenJDK Runtime Environment (Zulu 8.20.0.5-linux64) (build 1.8.0_121-b15)
    OpenJDK 64-Bit Server VM (Zulu 8.20.0.5-linux64) (build 25.121-b15, mixed mode)

    Случайно узнал о PaperSpigot
    https://yivesmirror.com/downloads/paperspigot
    Почитав документацию об изменениях, настройках и улучшенной производительности
    https://paper.readthedocs.io/en/paper-1.11/config/
    Решил использовать это ядро спигота. (Кстати производительность ощущается).

    Выделил на этот раз 4ГБ ОЗУ
    -Xms4G -Xmx4G

    Мои флаги в start.sh
    Код:
    java -Xms4G -Xmx4G -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:+AggressiveOpts -XX:+AlwaysPreTouch -jar PaperSpigot-1.11.2-b1055.jar nogui
    Загрузив новый мир, указал границу /wb set 5000 и /wb fill 100, карта погружалась около 4 часов, занимаемое место world 2.1ГБ. Краша не возникло, ОЗУ освобождается по мере работы сервера, это видно из htop.

    Сейчас все работает стабильно, на данный момент отрабатывает Dynmap отрисовку карты для браузера. Теперь буду пробовать границу мира /wb set 50000.

    ---
    Спасибо всем, кто помог, и давал советы, самостоятельно разбирался бы долго и не узнал бы о zulu8 и TacoSpigot и PaperSpigot.
     
    Последнее редактирование: 9 фев 2017

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