Показатели команды /mem /gc /lag
  • Автар пользователя
    Иван
    2 июня 2017 - 15:12
    Вы не авторизованы, войдите на сайт.
  • 22 комментария
Если на сервере установлен плагин Essentials, то после ввода команд /mem  /cg или /lag мы увидим в чате вывод показаний:

1. Аптайм - время работы сервера после включения.
2. TPS - Tick Per Second (кол-во тактов в секунду на сервере).
3. Максимум памяти - количество памяти выделенной для сервера. Указывается в параметре запуска сервера -Xmx.
4. Выделено памяти  - количество используемой памяти, которая требуется для сервера в настоящий момент.
5. Свободной памяти - количество памяти, которую освободил сборщик мусора (java).


 
Разберем подробнее четвёртый пункт: "Выделено памяти".  Многие не понимают и думают, что их обманули с памятью. Считают, что значение "выделено памяти" должно быть равно значению "Максимум памяти". Это крайне неверное мнение и складывается оно у многих неопытных пользователей и администраторов серверов Майнкрафт, по причине неправильного перевода плагина. И так!  Для сервера максимальная память 10.000 мегабайт (выделить для сервера можно и больше памяти), но это не означает, что сервер сразу её будет всю использовать. Сервер не задействует больше памяти чем ему требуется, поэтому он из 10.000 мегабайт возьмёт для начала столько, сколько ему нужно для работы.  Например, при запуске сервера потребовалось 484 мегабайт ( как на рисунке ), но по мере увеличения игроков на сервере, карта для каждого игрока будет прогружаться,  для этого серверу потребуется больше памяти, вот тут-то, сервер автоматически начнёт выделять для своей работы еще памяти из максимально доступной для него, которая указана в третьем пункте.  На увеличение этого показателя, могут влиять и другие факторы:  большое количество плагинов, неправильная работа плагинов, неправильная конфигурация плагинов, безрассудный игровой процесс, постоянные огромные сеты ( //set ) , полёты с большой скоростью /speed 5 - 10 и многое другое. Объяснить можно проще и сравнить это с ведром,  водой, мальчиком Васей и его гостями. Представим: У вас есть пустое ведро, объем которого равен 10 литров. У вас есть 1 литр воды. Мальчик  "Вася" попросил принести ему 1 литр воды. Вам нужно в этом ведре перенести для  мальчика "Васи" 1 литр воды. Но вдруг  "Вася"  сообщает, что к нему пришли гости, еще 3 мальчика и требуется воды еще больше, уже не 1 литр, а 4. Вы успешно помещаете всю эту воду в ведро, в размере 4 литров . Через некоторое время, Василий сообщает, что гостей гораздо уже больше, их уже не три, а семь и воды уже требуется 10 литров + 1 литр для мальчика Васи, это уже 11 литров, а ведро у Вас всего лишь для 10 литров воды, вы пытаетесь вместить одиннадцатый литр в 10 литровое ведро, но вода льётся через край. В итоге, вы приносите всего лишь 10 литров на 11 человек,  и для  каждого мальчика достаётся менее 1 литра. Вот то же самое происходит и с сервером.  Разработчики Майнкрафт рекомендуют для каждого игрока выделять 100 мегабайт оперативной памяти, с учётом того, что сервер не будет перегружен плагинами. Если память вашего сервера 10.000 мегабайт, а памяти на одного игрока требуется 100 мегабайт,  то делим 10000:100=100 получаем сто, значит при таком объеме оперативной памяти комфортно будут играть на сервере 100 человек, если оперативную память не съедают ваши плагины и игровой процесс. Ведром в этом случае будет являться сам сервер с выделенной для него памятью 10.000 ( как на картинке, это пример), водой будет являться карта сервера и плагины, а гостями будут игроки заходящие на сервер, для которых будет требоваться память минимум 100 мегабайт. Итог таков, показатель "Выделено памяти" отображает размер памяти, которая задействована сервером в данный момент и требуется для его работы. Размер памяти, которую потребляют в данный момент плагины, карта и игроки. Конечно можно сделать параметры запуска такими, что карта сразу будет прогружаться до предела выделенной для сервера памяти, показатели: "Максимум памяти" и "Выделено памяти"  при этом будут равными. Это принесёт печальный результат и постоянные краши, так - как вся память будет бессмысленно израсходована на карту, которая никем не используется. Сервер Майнкрафт устроен так, что регионы и чанки, начинают прогружаться только тогда, когда игрок попадает на них. Например, зашёл игрок на сервер, телепортировался в определённое место на сервере и вокруг этого игрока в этом месте всё прогрузилось. Начали бегать мобы, заработали механизмы, погода в этом месте начала для игрока меняться, то есть всё ожило. На всё это требуется около 100 мегабайт памяти. Остальные участки карты, в тех местах где нет игроков, отключены и оперативная память на них не тратиться. А теперь представим, что параметры запуска сервера мы настроили так, что наш сервер прогружает карту на все 10.000 мегабайт. Получится так, что карта которая не используется игроками, будет расходовать оперативную память и в случае, если игрок попадёт за пределы координат прогруженной карты, то для этого игрока не найдется более оперативной памяти для дальнейшей прогрузки им карты, начнутся лаги, либо сервер крашнется с ошибкой - "Out of Memory". Ведро то уже полное.))) Автор: Иван Дратьев
  • Фото пользователя Kozulka
    Kozulka
    2 июня 2017 - 23:42
Статья просто - огонь, очень полезно и информативно, спасибо большое.
  • Фото пользователя Иван
    Иван
    2 июня 2017 - 23:44
Kozulka Minecraft сказал(а):
Статья просто - огонь, очень полезно и информативно, спасибо большое.
Спасибо, попросили, написал. Многие просто спрашивают, почему так отображается. 
  • Фото пользователя Kozulka
    Kozulka
    2 июня 2017 - 23:45
Иван Дратьев сказал(а):
Спасибо, попросили, написал. Многие просто спрашивают, почему так отображается. 
Главное, чтобы не лень было прочитать столько текста.
  • Фото пользователя Иван
    Иван
    3 июня 2017 - 01:19
Kozulka Minecraft сказал(а):
Главное, чтобы не лень было прочитать столько текста.
Я думаю так, кому интересно, прочитают.
  • Фото пользователя MersaK
    MersaK
    6 июня 2017 - 05:01
А продолжение про сборщика ненужной памяти и чистилку кто напишет?
Сборка мусора
Управление памятью

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

Но вот какие у него настройки на данном хосте?
Я - честно - не понял, так как когда выполняю команду плагина ASW (модуль AutoSaveWorld)
asw forcegc
В ответ получаю
[Инфо]: Your JVM is configured to ignore GC calls, can't force gc

А на asw serverstatus
 [Инфо]: Cpu usage: 0.01%
 [Инфо]: Memory usage: 12.00% (512/4000 MB)

И если бы это ещё что-то значило, но... 
gc отвечает:
[Инфо]: Размер оперативной памяти для вашего сервера: 4,000 MB.
[Инфо]: Размер оперативной памяти требуемый сервером: 942 MB.
[Инфо]: Размер оперативной памяти которая освободилась: 515 MB.

То есть 512 = 515 - окей, нормально. Свободная память.
Но 12% от 4000 = 480Мб - где это, что это?

Графики зоротекса при этом выдают и вовсе:
Процессор: 12 из 160 = 7%
Оперативная память: 1496Mb из 4000Mb = 37%

Вот отсюда у нас начинаются полнейшие непоняти.
Какие параметры запуска Minecraft-сервера на данном хосте?
  • Фото пользователя

    6 июня 2017 - 15:40
Иначе бы сервера жили от силы полчаса при онлайне и крашились.Отнюдь, они живут сутками и неделями без перезагрузки. 
Они и не останавливаются у тех, у кого адекватно настроена сборка. Работает днями, неделями и месяцами, при большом онлайне. ( тык )
  • Фото пользователя

    6 июня 2017 - 16:21
В ответ получаю[Инфо]: Your JVM is configured to ignore GC calls, can't force gc
Возможно данного флага "GC" - нет в Java 8  либо хостинг использует другой,  аналогичный этому сборщик мусора,  поэтому твой плагин и не может получить данные из этого параметра.
  • Фото пользователя Витя
    Витя
    6 июня 2017 - 16:40
Какие параметры запуска Minecraft-сервера на данном хосте?
Сборщик мусора на хосте более новый: XX:+UseG1GC. В краш-репорте был написан полностью параеметр запуска, если найду выложу.
  • Фото пользователя Канобия
    Канобия
    6 июня 2017 - 16:48
И если бы это ещё что-то значило, но... gc отвечает: [Инфо]: Размер оперативной памяти для вашего сервера: 4,000 MB.[Инфо]: Размер оперативной памяти требуемый сервером: 942 MB. [Инфо]: Размер оперативной памяти которая освободилась: 515 MB.То есть 512 = 515 - окей, нормально. Свободная память. Но 12% от 4000 = 480Мб - где это, что это? Графики зоротекса при этом выдают и вовсе: Процессор: 12 из 160 = 7% Оперативная память: 1496Mb из 4000Mb = 37%
Команды вводить нужно в одно и тоже время, а не через неделю, тогда и показатели будут почти равными. )))
Там если и есть разница, то небольшая. В панели тебе показывает реальную память, которую потребляет твоя сборка, а на сервере видимо что-то  не всё учитывается.