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

Плагин [FIX]ItemFixer 3.1-Избавь свой сервер от читерских предметов!|Фикс DLC,WURST,SKILL|Upd 18.02.2018

Тема в разделе "Неподтвержденные плагины", создана пользователем slavik123123123, 17 мар 2016.

Статус темы:
Закрыта.
  1. artem0003

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

    Баллы:
    76
    Ну смотри что я заметил иногда сервер успивает в логах записать
    Сначало всех игроков кикает по причине you are sending too many packets
    Потом очень много handledisconnecting
    Потом игроки пытаются подключится но серв перезапускается
    Только всё это я увилел всего 1 раз за месяц
    Возможно это вообще другой краш
     
  2. artem0003

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

    Баллы:
    76
    А возможно и больше 2х раз
     
  3. artem0003

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

    Баллы:
    76
    Кстати прсле установки ядра spigot 1.8.8 перезагрузки стали раз в 7 часов но всё же это проблема
     
  4. artem0003

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

    Баллы:
    76
    settings:
    save-user-cache-on-stop-only: false
    bungeecord: false
    late-bind: false
    sample-count: 12
    player-shuffle: 0
    filter-creative-items: true
    user-cache-size: 1000
    int-cache-limit: 1024
    moved-wrongly-threshold: 0.0625
    moved-too-quickly-threshold: 100.0
    timeout-time: 60
    restart-on-crash: true
    restart-script: ./start.sh
    netty-threads: 4
    attribute:
    maxHealth:
    max: 2048.0
    movementSpeed:
    max: 2048.0
    attackDamage:
    max: 2048.0
    debug: false
     
  5. artem0003

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

    Баллы:
    76
    И в крашах пусто..
     
  6. artem0003

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

    Баллы:
    76
    Сегодня утром для теста решил плагин удалить и перезагрузок нету уже 9 часов
    Но он мне очень нужен. Альтернатива плагина есть? Или ещё можно как-то это исправить?
     
  7. Автор темы
    slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    не думаю что в перезагрузках виноват мой плагин, он просто не может взять и стопнуть сервер
     
  8. artem0003

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

    Баллы:
    76
    Но я тестировал очень долго. Ладно буду без этого плагина.
     
  9. danyadanya

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

    Баллы:
    76
    Имя в Minecraft:
    Mazafaka
    может он спосбствует этому. вернее определеные скрипты
     
    Последнее редактирование: 17 окт 2017
  10. qVeshn

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

    Баллы:
    66
    погоди... смотри, что мне удалось выяснить... я покопался в исходных кодах spigot.

    ДАЛЕЕ ПРОШУ МЕНЯ НЕ РУГАТЬ ЕСЛИ Я ОБШИБСЯ ГДЕ ТО И НЕ ДОГЛЯДЕЛ :rolleyes:
    СТАРАЛСЯ КАК МОГ :)

    Фраза в логе "Stopping server" выводиться только в методе stop (класс MinecraftServer)
    Метод stop вызывается в двух случаях:
    1. в главной процедуре сервера run, после сигнала о начале остановки сервера.
    2. в процедуре restart (класс RestartCommand).

    Пункт два нас не интересует, т.к. перед вызовом метода stop в лог пишется "Attempting to restart with ....". А у тебя в логе там этого нет.
    У тебя в логе перед фразой "Stopping server" выводиться фраза "Stopping the server". Эта фраза выводиться в процедуре execute класса CommandStop. Этот метод (в двух словах) посылает сигнал что пора завершать главный цикл метода run (главная процедура сервера). Это соответствует пункту 1 (см. выше)

    Класс CommandStop (опять в двух словах) можно вызвать только командой "stop"
    И делается это через метод dispatchCommand, который плагины могут дергать двумя способами:
    Server.dispatchCommand( Sender, "stop")
    или Player.performCommand("stop"), что равносильно предыдущей строке

    Итого, получается два варианта:
    1. В каком то плагине зашита команда dispatchCommand( ..., "stop")
    2. Плагин использует данные из своих конфигов для подставновки в команду dispatchCommand (например, ChestCommand, Authme, TimedCommands и т.д. и т.п., очень много плагинов существует где в конфигах прописываются команды которые надо выполнить)

    Пункт 1 можно попробовать проверить сканированием внутренностей джарок. Искать файлы с расширением *.class где встречаются одновременно два слова "stop" + "dispatchCommand" или "stop" + "performCommand"
    Но я думаю, что это маловероятно, что какой то плагин устроил такую заподлянку

    Пункт 2 проверить можно путем просмотра конфигов всех плагинов (некоторые могут хранить данные и в базе данных)

    Поиск удобно делать программой Total Commander, которая позволяет искать текст внутри других файлов, включая архивы. Также (для пункта 1) можно сначала найти список файлов с первым словом, вывести список на панель, а затем в найденных файлах поискать второе слово.

    ЗЫ. Не нападайте на Славика (сто двадцать третьего). Он хороший :)
     
    Последнее редактирование: 18 окт 2017
  11. artem0003

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

    Баллы:
    76
    Ммм интерестно,но с того момента как я удалил тот плагин itemfixer то на сервере было 16 часов аптайма!!! Вместо 7 с itemfixer. Но когда шёл 15 час тпс был около 11-17 так и надо?
     
  12. qVeshn

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

    Баллы:
    66
    Славик, добавь плиз в плагин команду типа "itemfixer info", чтобы она выводила в консоль инфу:
    1. Сколько памяти в джаве занято/всего/свободно
    2. Инфу по своим хешмэпам в классах. Сколько элементов в каждой коллекции.

    У меня есть следующее предположение:
    ItemFixer переполняет память, а какой-нибудь другой плагин (ну типа ClearLag, React и т.п.) имеет настройку при заканчивании оперативной памяти перезагружать сервер командой "stop"

    Уж очень мне не нравятся в коде ItemFixer строчки типа HashMap.put(Player,...)
    Ведь Player - это туда экземпляр класса передается.
    Более того Player - это интерфейс, который реализует какой то класс
    Другие плагины могут иметь свои фабрики объектов реализующие интерфейс Player.
    И не известно что и как они там реализовали в части equals и получения хешкода
    В результате в методе HashMap.put(Player,...) может не срабатывать правильно сравнение двух разных экземпляров Player и, в результате, каждый раз может добавляться новый экземпляр в коллекции

    Поэтому в качестве отладки прошу сделать команду которая покажет размеры своих внутренних коллекций (HashMap-ов)
    И тогда админы смогут время от времени смотреть масштабы бедствия с памятью

    :)
     
    Последнее редактирование: 18 окт 2017
  13. Автор темы
    slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    В мапу попадают только игроки создание самим бакитом. https://github.com/Dimatert9/ItemFixer/blob/master/src/ru/leymooo/fixer/utils/PlayerUtils.java#L32
    Также наврятли на одного игрока может создаться больше одного экземпляра. И даже если он вдруг будет то на врятли этот экземпляр появится в мапе от бакита. При выходе игрока я также убираю его из мапы. Ну а если както в мапу проник левый объект то для этого я юзаю WeakHashMap и при работе GC лишнее обьекты должны будут убиратся.
    Да и hashmap хранит в себе ссылки на объект, а она очень мало весит.
     
  14. qVeshn

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

    Баллы:
    66
    1. А как ты определяешь был ли Player создан баккитом или кем то другим? я что то ничего кроме интерфейса Player не увидел. Почему ты решил что объекты реализующий данный интерфейс принадлежат классу CraftBukkit?
    Я, например, в своих плагинах делал фиктивных онлайн игроков и регистрировал их в бакките в общей куче онлайн игрогов, чтобы они входили в общую цепочку нотификаций. Причем, класс я делал свой собственный. Просто реализовывал интерфейс Player (все методы которые там указаны). И реализовывал я их так, как сам считал нужным, а не так, как это было в CraftPlayer. Мне это нужно было, чтобы поведение объекта было другим.
    Кроме того, я знаю плагины которые тоже делают фиктивных игроков. И делают это они к сожалению очень криво. Например, HolographicScoreboard создает фиктивного игрока, чтобы от его имени выполнять команды из своего конфига (сделано очень криво, но это уже другая песня)

    2. Вывести дебаг инфу плагина было бы очень полезно хотя бы для отладки

    3. Артём (третий), у тебя есть плагин Essentials. Там есть команда вроде "memory" она показывает сколько свободной памяти в джаве. Попробуй включить ItemFixer и поюзать эту команду раз в час, чтобы посмотреть расход памяти
     
    Последнее редактирование: 18 окт 2017
  15. Автор темы
    slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    Такие игроки почти никогда не отправляют пакеты в сторону сервера, а значит такие игроки не будут добавлены в мапу. Я не знаю как точно устроен протоколлиб, но возможно он даже и не видет пакеты которые идут от таких игроков, а следовательно не будет вызван евент и не будет добавлен этот игрок в мапу. И опять же, мапа хранит в себе только слабые ссылки в ключах, а ссылки почти ничего не весят, только объект в value но и там объекты то не слишком и больше.
    Всё что может кушать оперативку это nbt которые получаются через ProtocolLib но это уже другая история.
     
  16. qVeshn

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

    Баллы:
    66
  17. artem0003

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

    Баллы:
    76
    Ммм а вот что мне выдало в /memody
    > [17:50:10 INFO]: CONSOLE issued server command: /memory
    > [17:50:10 INFO]: Аптайм: 10 часов 20 минут 28 секунд
    > [17:50:10 INFO]: TPS = 19,93
    > [17:50:10 INFO]: Максимум памяти: 3 486 MB.
    > [17:50:10 INFO]: Выделено памяти: 1 441 MB.
    > [17:50:10 INFO]: Свободной памяти: 653 MB.
    > [17:50:10 INFO]: World "world": 649 чанков, 431 объектов, 543 тайлов.
    > [17:50:10 INFO]: Nether "world_nether": 0 чанков, 0 объектов, 0 тайлов.
    > [17:50:10 INFO]: The End "world_the_end": 0 чанков, 0 объектов, 0 тайлов.
    За чем тут конкретнее наблюдать?
     
  18. artem0003

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

    Баллы:
    76
    С оперативкой норма вроде как минимум до перезагрузки было задействовано 2300/3500 мб.
     
  19. qVeshn

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

    Баллы:
    66
    1.
    3.486 - это не задействовано
    1.441 - вот это задействовано
    Сделай при запуске spigot чтобы вся память выделялась сразу (Максимум=Выделено)
    java -Xms3500m -Xmx3500m .......

    2. Включи ItemFixer и время от времени смотри сколько свободной памяти остается вплоть до перезапуска сервера
    Если свободная память всё меньше и меньше и перед рестартом сервера совсем мало, то скорее всего где ту утечка памяти идет. ИМХО 500mb свободной памяти - это уже мало
     
  20. artem0003

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

    Баллы:
    76
    У меня хостинг...
    Но у меня ещё и другие плагины оперативку сжирают
    Не знаю какие но вроде пойдёт и так.
    Вы видели сколько и чего в старом моём сообщении сколько и чего когда я написал /memory.
    Ну это также зависит и от игроков сколько игроков и сколько они играют у меня 20-9 не больше не меньше.
     
Статус темы:
Закрыта.

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