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

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

Статус
Закрыто для дальнейших ответов.
Хм... очень странно

1.
Может кто-то в из чата набирает команду /stop? ;)

2.
Кстати, в корне сервера есть конфиг spigot.yml
Я там нашел вот такое:
timeout-time
Default: 60
Type: Integer
Description: How long - in seconds - the server should go unresponsive before performing a thread dump in the console and, if configured, attempt to shut down and restart.
Может в этом направлении покапать?

3.
И еще там есть флаг
debug: false
Может попробовать его в true поставить и посмотреть что в консоле будет?

4.
И вот еще в spigot.yml есть флаг
restart-on-crash: true/false
restart-script: ...
У тебя там чего написано?
И может посмотреть есть ли логи краша в папке crash-reports?
Ну смотри что я заметил иногда сервер успивает в логах записать
Сначало всех игроков кикает по причине you are sending too many packets
Потом очень много handledisconnecting
Потом игроки пытаются подключится но серв перезапускается
Только всё это я увилел всего 1 раз за месяц
Возможно это вообще другой краш
 
Ну смотри что я заметил иногда сервер успивает в логах записать
Сначало всех игроков кикает по причине you are sending too many packets
Потом очень много handledisconnecting
Потом игроки пытаются подключится но серв перезапускается
Только всё это я увилел всего 1 раз за месяц
Возможно это вообще другой краш
А возможно и больше 2х раз
 
Хм... очень странно

1.
Может кто-то в из чата набирает команду /stop? ;)

2.
Кстати, в корне сервера есть конфиг spigot.yml
Я там нашел вот такое:
timeout-time
Default: 60
Type: Integer
Description: How long - in seconds - the server should go unresponsive before performing a thread dump in the console and, if configured, attempt to shut down and restart.
Может в этом направлении покапать?

3.
И еще там есть флаг
debug: false
Может попробовать его в true поставить и посмотреть что в консоле будет?

4.
И вот еще в spigot.yml есть флаг
restart-on-crash: true/false
restart-script: ...
У тебя там чего написано?
И может посмотреть есть ли логи краша в папке crash-reports?
Кстати прсле установки ядра spigot 1.8.8 перезагрузки стали раз в 7 часов но всё же это проблема
 
Хм... очень странно

1.
Может кто-то в из чата набирает команду /stop? ;)

2.
Кстати, в корне сервера есть конфиг spigot.yml
Я там нашел вот такое:
timeout-time
Default: 60
Type: Integer
Description: How long - in seconds - the server should go unresponsive before performing a thread dump in the console and, if configured, attempt to shut down and restart.
Может в этом направлении покапать?

3.
И еще там есть флаг
debug: false
Может попробовать его в true поставить и посмотреть что в консоле будет?

4.
И вот еще в spigot.yml есть флаг
restart-on-crash: true/false
restart-script: ...
У тебя там чего написано?
И может посмотреть есть ли логи краша в папке crash-reports?
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
 
Хм... очень странно

1.
Может кто-то в из чата набирает команду /stop? ;)

2.
Кстати, в корне сервера есть конфиг spigot.yml
Я там нашел вот такое:
timeout-time
Default: 60
Type: Integer
Description: How long - in seconds - the server should go unresponsive before performing a thread dump in the console and, if configured, attempt to shut down and restart.
Может в этом направлении покапать?

3.
И еще там есть флаг
debug: false
Может попробовать его в true поставить и посмотреть что в консоле будет?

4.
И вот еще в spigot.yml есть флаг
restart-on-crash: true/false
restart-script: ...
У тебя там чего написано?
И может посмотреть есть ли логи краша в папке crash-reports?
И в крашах пусто..
 
Хм... очень странно

1.
Может кто-то в из чата набирает команду /stop? ;)

2.
Кстати, в корне сервера есть конфиг spigot.yml
Я там нашел вот такое:
timeout-time
Default: 60
Type: Integer
Description: How long - in seconds - the server should go unresponsive before performing a thread dump in the console and, if configured, attempt to shut down and restart.
Может в этом направлении покапать?

3.
И еще там есть флаг
debug: false
Может попробовать его в true поставить и посмотреть что в консоле будет?

4.
И вот еще в spigot.yml есть флаг
restart-on-crash: true/false
restart-script: ...
У тебя там чего написано?
И может посмотреть есть ли логи краша в папке crash-reports?
Сегодня утром для теста решил плагин удалить и перезагрузок нету уже 9 часов
Но он мне очень нужен. Альтернатива плагина есть? Или ещё можно как-то это исправить?
 
не думаю что в перезагрузках виноват мой плагин, он просто не может взять и стопнуть сервер
 
Последнее редактирование:
Но я тестировал очень долго. Ладно буду без этого плагина.
погоди... смотри, что мне удалось выяснить... я покопался в исходных кодах 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) можно сначала найти список файлов с первым словом, вывести список на панель, а затем в найденных файлах поискать второе слово.

ЗЫ. Не нападайте на Славика (сто двадцать третьего). Он хороший :)
 
Последнее редактирование:
погоди... смотри, что мне удалось выяснить... я покопался в исходных кодах 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) можно сначала найти список файлов с первым словом, вывести список на панель, а затем в найденных файлах поискать второе слово.

ЗЫ. Не нападайте на Славика (сто двадцать третьего). Он хороший :)
Ммм интерестно,но с того момента как я удалил тот плагин itemfixer то на сервере было 16 часов аптайма!!! Вместо 7 с itemfixer. Но когда шёл 15 час тпс был около 11-17 так и надо?
 
не думаю что в перезагрузках виноват мой плагин, он просто не может взять и стопнуть сервер

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

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

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

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

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

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

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

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

:)
В мапу попадают только игроки создание самим бакитом. https://github.com/Dimatert9/ItemFixer/blob/master/src/ru/leymooo/fixer/utils/PlayerUtils.java#L32
Также наврятли на одного игрока может создаться больше одного экземпляра. И даже если он вдруг будет то на врятли этот экземпляр появится в мапе от бакита. При выходе игрока я также убираю его из мапы. Ну а если както в мапу проник левый объект то для этого я юзаю WeakHashMap и при работе GC лишнее обьекты должны будут убиратся.
Да и hashmap хранит в себе ссылки на объект, а она очень мало весит.
 
В мапу попадают только игроки создание самим бакитом. https://github.com/Dimatert9/ItemFixer/blob/master/src/ru/leymooo/fixer/utils/PlayerUtils.java#L32
Также наврятли на одного игрока может создаться больше одного экземпляра. И даже если он вдруг будет то на врятли этот экземпляр появится в мапе от бакита. При выходе игрока я также убираю его из мапы. Ну а если както в мапу проник левый объект то для этого я юзаю WeakHashMap и при работе GC лишнее обьекты должны будут убиратся.
Да и hashmap хранит в себе ссылки на объект, а она очень мало весит.
1. А как ты определяешь был ли Player создан баккитом или кем то другим? я что то ничего кроме интерфейса Player не увидел. Почему ты решил что объекты реализующий данный интерфейс принадлежат классу CraftBukkit?
Я, например, в своих плагинах делал фиктивных онлайн игроков и регистрировал их в бакките в общей куче онлайн игрогов, чтобы они входили в общую цепочку нотификаций. Причем, класс я делал свой собственный. Просто реализовывал интерфейс Player (все методы которые там указаны). И реализовывал я их так, как сам считал нужным, а не так, как это было в CraftPlayer. Мне это нужно было, чтобы поведение объекта было другим.
Кроме того, я знаю плагины которые тоже делают фиктивных игроков. И делают это они к сожалению очень криво. Например, HolographicScoreboard создает фиктивного игрока, чтобы от его имени выполнять команды из своего конфига (сделано очень криво, но это уже другая песня)

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

3. Артём (третий), у тебя есть плагин Essentials. Там есть команда вроде "memory" она показывает сколько свободной памяти в джаве. Попробуй включить ItemFixer и поюзать эту команду раз в час, чтобы посмотреть расход памяти
 
Последнее редактирование:
1. А как ты определяешь был ли Player создан баккитом или кем то другим? я что то ничего кроме интерфейса Player не увидел. Почему ты решил что объекты реализующий данный интерфейс принадлежат классу CraftBukkit?
Я, например, в своих плагинах делал фиктивных онлайн игроков и регистрировал их в бакките в общей куче онлайн игрогов, чтобы они входили в общую цепочку нотификаций. Причем, класс я делал свой собственный. Просто реализовывал интерфейс Player (все методы которые там указаны). И реализовывал я их так сам считал нужным, а не так как это было в CraftPlayer. Мне это нужно было, чтобы поведение объекта было другим.
Кроме того, я знаю плагины которые тоже делают фиктивных игроков. И делают это они к сожалению очень криво. Например, HolographicScoreboard создает фиктивного игрока, чтобы от его имени выполнять команды из своего конфига (сделано очень криво, но это уже другая песня)
Такие игроки почти никогда не отправляют пакеты в сторону сервера, а значит такие игроки не будут добавлены в мапу. Я не знаю как точно устроен протоколлиб, но возможно он даже и не видет пакеты которые идут от таких игроков, а следовательно не будет вызван евент и не будет добавлен этот игрок в мапу. И опять же, мапа хранит в себе только слабые ссылки в ключах, а ссылки почти ничего не весят, только объект в value но и там объекты то не слишком и больше.
Всё что может кушать оперативку это nbt которые получаются через ProtocolLib но это уже другая история.
 
drinks.gif
 
1. А как ты определяешь был ли Player создан баккитом или кем то другим? я что то ничего кроме интерфейса Player не увидел. Почему ты решил что объекты реализующий данный интерфейс принадлежат классу CraftBukkit?
Я, например, в своих плагинах делал фиктивных онлайн игроков и регистрировал их в бакките в общей куче онлайн игрогов, чтобы они входили в общую цепочку нотификаций. Причем, класс я делал свой собственный. Просто реализовывал интерфейс Player (все методы которые там указаны). И реализовывал я их так, как сам считал нужным, а не так, как это было в CraftPlayer. Мне это нужно было, чтобы поведение объекта было другим.
Кроме того, я знаю плагины которые тоже делают фиктивных игроков. И делают это они к сожалению очень криво. Например, HolographicScoreboard создает фиктивного игрока, чтобы от его имени выполнять команды из своего конфига (сделано очень криво, но это уже другая песня)

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

3. Артём (третий), у тебя есть плагин Essentials. Там есть команда вроде "memory" она показывает сколько свободной памяти в джаве. Попробуй включить ItemFixer и поюзать эту команду раз в час, чтобы посмотреть расход памяти
Ммм а вот что мне выдало в /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 тайлов.
За чем тут конкретнее наблюдать?
 
Такие игроки почти никогда не отправляют пакеты в сторону сервера, а значит такие игроки не будут добавлены в мапу. Я не знаю как точно устроен протоколлиб, но возможно он даже и не видет пакеты которые идут от таких игроков, а следовательно не будет вызван евент и не будет добавлен этот игрок в мапу. И опять же, мапа хранит в себе только слабые ссылки в ключах, а ссылки почти ничего не весят, только объект в value но и там объекты то не слишком и больше.
Всё что может кушать оперативку это nbt которые получаются через ProtocolLib но это уже другая история.
С оперативкой норма вроде как минимум до перезагрузки было задействовано 2300/3500 мб.
 
Ммм а вот что мне выдало в /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 тайлов.
За чем тут конкретнее наблюдать?

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

2. Включи ItemFixer и время от времени смотри сколько свободной памяти остается вплоть до перезапуска сервера
Если свободная память всё меньше и меньше и перед рестартом сервера совсем мало, то скорее всего где ту утечка памяти идет. ИМХО 500mb свободной памяти - это уже мало
 
1.
3.486 - это не задействовано
1.441 - вот это задействовано
Сделай при запуске spigot чтобы вся память выделялась сразу (Максимум=Выделено)
java -Xms3500m -Xmx3500m .......

2. Включи ItemFixer и время от времени смотри сколько свободной памяти остается вплоть до перезапуска сервера
Если свободная память всё меньше и меньше и перед рестартом сервера совсем мало, то скорее всего где ту утечка памяти идет. ИМХО 500mb свободной памяти - это уже мало
У меня хостинг...
Но у меня ещё и другие плагины оперативку сжирают
Не знаю какие но вроде пойдёт и так.
Вы видели сколько и чего в старом моём сообщении сколько и чего когда я написал /memory.
Ну это также зависит и от игроков сколько игроков и сколько они играют у меня 20-9 не больше не меньше.
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх