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

Утечка памяти (скорее всего)

Тема в разделе "Управление сервером Bukkit", создана пользователем Haunted, 12 ноя 2023.

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

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

    Баллы:
    61
    Имя в Minecraft:
    IIHaunted
    Я держу майнкрафт сервер на PurPur 1.18.2, и последний +-месяц наблюдаю падение игрового сервера. У меня 3 сервера - Velocity, Lobby и основной игровой. Падает только основной и только при наличии хотя бы 1 игрока. Долгое время пытаюсь решить эту проблему как самостоятельно, так и с помощью тех поддержки хостингов/платных системных администраторов. Помимо падений бывают залаги как основного сервера, так и велосити (перестаёт пускать игроков, но продолжает работать ссылаясь на плохое подключение игрока)

    Оперативная память выходит за рамки установленных данных в start.sh, забивает фулл оперативу и SWAP и далее падает основной игровой сервер (без краш репортов или каких либо варнов/ошибок). Сервер падает без сохранений, оставляя обрыв в логах, будто бы ничего не произошло.

    Параметры VDS:
    36GB Оперативной памяти
    16 Процессоров AMD Ryzen 7 5800X

    Пробовал уйму методов, расскажу по порядку: 1. Смена хоста, 2. Перебор плагинов по одному, 3. Оптимизация кфг ядер, 4. Изменения в командах запуска.

    1. Изначально был на хостинге appletec, проблема появилась где то в середине разработки сервера. Краши были изначально с большой переодичностью, постепенно ускоряясь. Потом перешел на OVH (проблема осталась)

    2. Перебирал плагины, особо не заметил разницу в потреблении оперативки, так же сильно жрёт. (возможно проблема в них, но я не в силах полноценно разобраться в этом)

    3. Ставил дефолт кфг ядер, ставил настроенные по гайдам в форумах, ставили сис. админы. Не помогло.

    4. Пробовал разное: Выделять 2гб при старте и ставить максимум 10, выделять 10гб при старте и максимум 24. Пробовал даже SWAP в запуске, оставляя 2гб на старт и 24-2 гб максимума. Ставил 24 выделенных и 24 максимум. Менял флаги запуска, ничего не поменялось.
    Команда запуска на данный момент:

    java -Xms128M -Xmx$((20576-4096))M -Dterminal.jline=false -Dterminal.ansi=true -Duser.timezone=GMT+3 --add-modules=jdk.incubator.vector -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -XX:G1NewSizePercent=40 -XX:G1MaxNewSizePercent=50 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=15 -XX:+UnlockDiagnosticVMOptions -XX:GCLockerRetryAllocationCount=4 -jar server.jar --nogui
    Прикрепил к посту список плагинов.

    Проверял сборку на наличие вирусов, ничего не нашел. Все плагины в сборке либо бесплатные, либо самописные либо платные. На данный момент в сборке нет ни 1 ликнутого или скачанного с сомнительного ресурса плагина.
    image.png

    Вот htop моего вдс:
    image.png
    Тут сервер работает 9 минут. Онлайн: 5-9

    heapsummary от spark - Heap Summary | spark (lucko.me)
     
  2. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Возможно перестает пускать как раз из-за проблем на игровом сервере, а не из-за велосити. Лучше это диагностировать в моменте.

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

    А вот это уже не нормально. Даже если это происходит при запуске с запасом памяти, то ты явно что-то делаешь не так. Первое же, на что я обратил внимание - это аргумент, ограничивающий макс. количество памяти:
    -Xmx$((20576-4096))M
    Это что? Там указано конкретное значение или вот прям так и установлено? В любом случае, должно быть конкретное число:
    -Xmx4096M

    Такое чаще всего происходит НЕ при утечке памяти, а при убийстве процесса.

    Первая причина такого поведения - убивает панель сервера из-за различных причин. Есть какие-то панели по типу Pterodactyl или иные? Или же управление по SSH?
    в логах панели наверняка можно найти записи об убийстве процесса.

    И вторая причина такого поведения - линукс убивает процессы, когда в системе конается оперативная память. Механизм называется Out-Of-Memory Killer.
    При этом в системных логах тоже появляется соответствующая запись, файл /var/log/syslog

    У тебя при таком подходе остаётся 12 гигов. Часть идёт на JVM, часть на другие процессы, часть на систему. Если оперативки не остаётся, то как раз система и убивает процесс.

    Так что поставь для начала небольшое значение - для десяти игроков будет достаточно 4- гигов с головой. После этого прям в игре проверь количество выделенной памяти, чтобы убедиться, что оно действительно корректное. В Essentials для этого есть команда /mem или /gc
    Если есть какая-то утечка - как раз сервер будет быстрее падать, чтобы подтвердить или опровергнуть твою теорию.

    Если падения продолжатся, то начни проделывать каждый из шагов, пока причина не будет обнаружена:
    1) Изучи логи. После корректировки xmx логи с высокой вероятностью НЕ будут обрываться. Возможно найдёшь причину остановки/зависания/падения сервера
    2) Обнови ядро до последнего билда ядра (пурпур 1.18.2). Если не помогло, то...
    3) Пробуй временно убрать половину плагинов. Если не помогло, то...
    4) Пробуй временно убрать другую половину плагинов. Если не помогло, то...
    5) Удали для теста все аргументы java кроме xms и xmx. Если не помогло, то...
    6) Обнови Java до последнего билда. 1.18.2 работает на 17+, но при желании можно ставить и более новые версии, всё должно работать. Если не помогло, то будем разбираться дальше

    Таким образом ты, скорее всего, приблизишься к обнаружению причины проблемы. 10 минут - довольно небольшой промежуток времени, поэтому найти причину можно довольно быстро
     
  3. Автор темы
    Haunted

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

    Баллы:
    61
    Имя в Minecraft:
    IIHaunted
    По поводу вопросов:
    1. Выделение оперативной памяти было создано вместе со свапом как я понял (ставила тех поддержка хостинга, как 1 из вариантов попытки решения проблемы). На данный момент стоит статичное число - 18. Все так же падает.
    2. Управление идет по SSH исключительно, проверял /gc (Essentials), выделение памяти идет корректно.
    Теперь по поводу предложений:
    1. Логи никак не меняются от команды запуска. Они обрываются в обоих случаях.
    2. Ядро обновлял. Ушел с пурпура по итогу на пафферфиш, по итогу сервер живет больше, оптимизация лучше.
    3. Я не удалял половину плагинов. Я мучаясь удалял по 1 плагину, проверяя и дожимая до конца (до каления). Судя по всему плагины тут не сильно влияют.
    4. Аналогично с 3.
    5. Флаги запуска менял многократно, чаще всего это вызывало большие проблемы.
    6. Джава стоит ласт билда 17 версии. Сменить саму версию не смогу, на ней держатся многие плагины в моей сборке.

    Могу дополнить, что начал по одному плагину воссоздавать сборку на отдельной вдс, по началу помогало. Решил заменить многий мусор одним CMI (оплаченный, не ликнутый). Проблемы вроде бы не было, но с разовым добавлением 4-5 плагинов судя по накоплению оперативки проблема настигла меня и тут. Отправлю плагины, которые я добавил.
     
  4. Автор темы
    Haunted

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

    Баллы:
    61
    Имя в Minecraft:
    IIHaunted
    Вот список плагинов. Все скачаны с официальных ресурсов. В AjLeaderboards я уверен (удалял его из проблемной сборки и сервак все равно падал), не уверен разве что с PrimeAlchemist и возможно с AdvancedCrates
    image.png
     
  5. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Я правильно понимаю, что ситуация сейчас такая?
    1) Ядру выделено небольшое количество памяти, это подтверждается значениями в /mem
    2) В системе остаётся большое количество оперативной памяти
    3) Сервер по-прежнему завершает работу, а логи при этом обрываются
    4) Проблема воспроизводится даже без плагинов

    Всё верно?

    В этом случае вопрос - каким образом запускается сервер?
    В screen/tmux/docker? Через панели по типу Multicraft/Pterodactyl?
     
  6. Overwrite

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

    Баллы:
    98
    Имя в Minecraft:
    artcart
    Всё было куда проще.
    JSEXP, как я уже не раз говорил - корень всех зол

    Удалил бы джейкоб то видео с ним к ебени матери, чтоб людей не приучать к софту вредящему...
     
  7. SlenderMix

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

    Баллы:
    76
    Имя в Minecraft:
    HIDDEN
    :lol::lol::lol::bad::bad::bad::rolleyes::rolleyes::rolleyes::cry::cry::cry::good::good::good::good:
     
  8. LeonBrawl

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

    Баллы:
    61
    Имя в Minecraft:
    PharaOnml
    Задампи сурв и почекай через yourkit
     

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