Показатели команды /mem /gc /lag

Посетители, находящиеся в группе Гости, не могут оставлять комментарии.
Иван

2 июня 2017 - 15:12

Если на сервере установлен плагин 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". Ведро то уже полное.))) Автор: Иван Дратьев

22 комментария
Иван

6 июня 2017 - 18:51

MersaK MersaK сказал(а):
А продолжение про сборщика ненужной памяти и чистилку кто напишет?
Продолжение можете написать Вы. Без копипастов и без ссылок на непонятные источники. Если статья будет интересной и познавательной, мы опубликуем её в статических страницах нашего сайта.

Сергей

6 июня 2017 - 19:59

MersaK MersaK сказал(а):
Какие параметры запуска Minecraft-сервера на данном хосте?
Параметры запуска Вашего сервера: -server -XX:MaxPermSize=128M -Xmx4000M -Xms128M -Xmn380m -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:MaxGCPauseMillis=45 -XX:TargetSurvivorRatio=90 -XX:G1MaxNewSizePercent=80 -XX:InitiatingHeapOccupancyPercent=10 -XX:G1MixedGCLiveThresholdPercent=50 -XX:+AggressiveOpts -jar spigot-1.10.2.jar Подробнее о параметрах. ........................................................................Основные параметры:
  • -Xmn определяет объём занятой памяти до которой сборщик мусора должен освобождать память (если это возможно);
  • -Xms определяет размер начальной выделенной памяти под объекты;
  • -Xmx определяет максимальный размер памяти, выше которого приложение не задействует;

MersaK

7 июня 2017 - 17:10

Спасибо, попробуем поменять и понаблюдать эффект.

MersaK

27 июня 2017 - 05:13

Сергей TU154 сказал(а):
Параметры запуска Вашего сервера:-server -XX:MaxPermSize=128M -Xmx4000M -Xms128M -Xmn380m -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:MaxGCPauseMillis=45 -XX:TargetSurvivorRatio=90 -XX:G1MaxNewSizePercent=80 -XX:InitiatingHeapOccupancyPercent=10 -XX:G1MixedGCLiveThresholdPercent=50 -XX:+AggressiveOpts -jar spigot-1.10.2.jar
После появления функции авторестарта на сайте (или случайно так совпало?) у меня опять пошло что-то бесконтрольное. До того, рестарт эффективно высвобождал память (становилось занято в начале ~1Гб). Теперь же, даже изменив параметры запуска в файле start.sh - рестарт сразу забирает 3Гб из четырёх. Никаких кардинальных изменений в моих плагинах небыло, только стало больше построек в мирах. Команда worldguard report выдала отчет по параметрам запуска:
Java: Oracle Corporation 1.8.0_121 (http://java.oracle.com/) Operating System: Linux 4.8.0-52-generic (amd64) Available Processors: 12 Free Memory: 2374 MB Max Memory: 4000 MB Total Memory: 2924 MB System Load Average: 1.51 Java Uptime: 119 minutes Startup:  Input Arguments:  -XX:MaxPermSize=128M  -Xmx4000M  -Xms128M  -Xmn380m  -XX:+AlwaysPreTouch  -XX:+DisableExplicitGC  -XX:+UseG1GC  -XX:+UnlockExperimentalVMOptions  -XX:MaxGCPauseMillis=45  -XX:TargetSurvivorRatio=90  -XX:G1NewSizePercent=50  -XX:G1MaxNewSizePercent=80  -XX:InitiatingHeapOccupancyPercent=10  -XX:G1MixedGCLiveThresholdPercent=50  -XX:+AggressiveOpts
Из чего я делаю вывод, что Zorotex проигнорировал мои настройки запуска в start.sh , либо выдаёт этот отчёт с другого места (не моего сервера). Что мне теперь с этим делать? /memory [Инфо]: Размер оперативной памяти для вашего сервера: 4,000 MB. [Инфо]: Размер оперативной памяти требуемый сервером: 2,924 MB. [Инфо]: Размер оперативной памяти которая освободилась: 2,124 MB. /asw serverstatus  [Инфо]: Cpu usage: 0.79%  [Инфо]: Memory usage: 14.00% (512/4000 MB) На страничке с графиками: Оперативная память: 3553Mb из 4000Mb Есть что по-существу объяснить?

Анатолий

4 июля 2017 - 22:15

MersaK MersaK сказал(а):
После появления функции авторестарта на сайте (или случайно так совпало?) у меня опять пошло что-то бесконтрольное.До того, рестарт эффективно высвобождал память (становилось занято в начале ~1Гб).Теперь же, даже изменив параметры запуска в файле start.sh - рестарт сразу забирает 3Гб из четырёх.Никаких кардинальных изменений в моих плагинах небыло, только стало больше построек в мирах.Команда worldguard report выдала отчет по параметрам запуска:
Java: Oracle Corporation 1.8.0_121 (http://java.oracle.com/)Operating System: Linux 4.8.0-52-generic (amd64)Available Processors: 12Free Memory: 2374 MBMax Memory: 4000 MBTotal Memory: 2924 MBSystem Load Average: 1.51Java Uptime: 119 minutesStartup:  Input Arguments:  -XX:MaxPermSize=128M  -Xmx4000M  -Xms128M  -Xmn380m  -XX:+AlwaysPreTouch  -XX:+DisableExplicitGC  -XX:+UseG1GC  -XX:+UnlockExperimentalVMOptions  -XX:MaxGCPauseMillis=45  -XX:TargetSurvivorRatio=90  -XX:G1NewSizePercent=50  -XX:G1MaxNewSizePercent=80  -XX:InitiatingHeapOccupancyPercent=10  -XX:G1MixedGCLiveThresholdPercent=50  -XX:+AggressiveOpts
Из чего я делаю вывод, что Zorotex проигнорировал мои настройки запуска в start.sh , либо выдаёт этот отчёт с другого места (не моего сервера).Что мне теперь с этим делать?/memory[Инфо]: Размер оперативной памяти для вашего сервера: 4,000 MB.[Инфо]: Размер оперативной памяти требуемый сервером: 2,924 MB.[Инфо]: Размер оперативной памяти которая освободилась: 2,124 MB./asw serverstatus [Инфо]: Cpu usage: 0.79% [Инфо]: Memory usage: 14.00% (512/4000 MB)На страничке с графиками:Оперативная память: 3553Mb из 4000Mb Есть что по-существу объяснить?
Объясняю! Конечно проигнорировал посторонние настройки запуска. Если бы так всё было просто, то смысл тогда делать лимиты по слотам и лимиты по ресурсам. Заказал на 15 слотов сервер, указал в своем start.sh сколько хочешь памяти и слотов, задействовал весь дата центр за полтинник и играй наслаждайся. Действительно, зачем все переплачивают? Наверное они не догадались start.sh установить.  Либо выдаёт отчет рандомно из множества процессов, которые вы наплодили своим плагином, да и тем более настройками из start.sh. Чтобы запустить сервер, нужно, чтобы предыдущий процесс завершился. Попробуйте у себя на Windows запустить сервер два раза и посмотрите что из этого выйдет. Сервер попытается запуститься, но остановится с ошибкой использованного порта. В системе Linux , сервера запускаются с  помощью программы Screen. Так вот, запуская сервер и нажимая кнопку старт в панели, создаётся процесс с вашим id сервера и будет работать до тех пор, пока этот процесс не завершить нажав на кнопку стоп. В Вашем же случае происходит следующее, при незавершенном процессе, вы запускаете еще один сервер с настройками из вашего start.sh, но он не может запуститься из-за того, что порт сервера уже используется, так как предыдущий сервер и сессия screen не завершена, а завершить можно только кнопкой в панели. Теперь рассмотрим Ваши параметры в Вашем start.sh и вспомним знаменитую игру ГТА - 5 и ее аналоги. В этой игре физика и объекты загружаются только в том месте и только тогда, когда в него попадает игрок. Тоесть, ресурсы процессора и оперативной памяти задействуются  только для области в которой находится игрок.  Вы для кого: -Xms1800M почти два гигабайта задействовали ? Для мобов? Может для движения лавы в коренных породах карты?  Там где нет игроков, не должны расходоваться ресурсы сервера бестолку. Для этого достаточно -Xms128M, а остальное прогрузят сами игроки, когда начнут бегать по карте. Отсюда у Вас и показатель при запуске сервера: [Инфо]: Размер оперативной памяти требуемый сервером: 2,924 MB. Сервер сразу при запуске прогрузил карту на -Xms1800M Уберите плагин который перезапускает сервер и start.sh и всё встанет на свои места у вас.

MersaK

5 июля 2017 - 15:58

Большое спасибо за подробные разъяснения. Но… "при незавершенном процессе, вы запускаете еще один сервер с настройками из вашего start.sh" Плагину AutoSaveWorld (который, собственно, взят из вашего раздела "модули" для 1.10) более двух недель назад указано не выполнять перезагрузку сервера. Там стояла только опция crashrestart: enabled. Предполагалось, что она должна запустить сервер в случае краша из-за какого-нибудь плагина (я давно отладил их и никаких крашей уже не наблюдалось). Проверил функционал "Авторестарт сервера:", поставив перезапуска черерз 3 часа. Рестартовал мой сервер. Никакой разницы не вижу. Сделал, как вы сказали: убрал AutoSaveWorld и start.sh. Перезапустил кнопками на страничке управления... Результат ещё хуже. Оперативная память: 3998Mb из 4000Mb. И… тут одно из двух: либо сервер распух от ботов-аккаунтов, либо моего экземпляра сервера ранее запустились какие-то процессы и зависли там у вас. Я не знаю, что дальше исправлять. Надо всё остановить.

Анатолий

5 июля 2017 - 16:06

MersaK MersaK сказал(а):
Большое спасибо за подробные разъяснения.Но…'при незавершенном процессе, вы запускаете еще один сервер с настройками из вашего start.sh'Плагину AutoSaveWorld (который, собственно, взят из вашего раздела 'модули' для 1.10) более двух недель назад указано не выполнять перезагрузку сервера.Там стояла только опция crashrestart: enabled. Предполагалось, что она должна запустить сервер в случае краша из-за какого-нибудь плагина (я давно отладил их и никаких крашей уже не наблюдалось).Проверил функционал 'Авторестарт сервера:', поставив перезапуска черерз 3 часа. Рестартовал мой сервер. Никакой разницы не вижу.Сделал, как вы сказали: убрал AutoSaveWorld и start.sh. Перезапустил кнопками на страничке управления... Результат ещё хуже. Оперативная память: 3998Mb из 4000Mb.И… тут одно из двух: либо сервер распух от ботов-аккаунтов, либо моего экземпляра сервера ранее запустились какие-то процессы и зависли там у вас.Я не знаю, что дальше исправлять. Надо всё остановить.
Без этих плагинов попробуйте запустить:

Kozulka

8 июля 2017 - 06:59

На компе своём свою сборку запусти и посмотри сколько она жрёт, а потом вопросы задавай.

Александр

11 июля 2017 - 12:13

Kozulka Minecraft сказал(а): На компе своём свою сборку запусти и посмотри сколько она жрёт, а потом вопросы задавай.
АгА! А вдруг выясница, что комп его на память обманывает )), то придётся менять комп.

MersaK

13 июля 2017 - 03:34

Вот вам смешно, а мне не до смеха. Несколько дней плясал с бубном по совету админа хостинга. Ничего не помогало снизить загруженность ОЗУ с 4000Мб. Удалил тыщу старых аккаунтов в AuthMe и прочих папках плагинов и миров. Вчера сервер перезапустился, стало занято 2900Мб. Ну, думаю, отпустило… Сегодня  [03:09:18] [Инфо]: Время непрерывной работы: 3 часов 9 минут 6 секунд  [03:09:18] [Инфо]: Количество тактов в секунду = 20  [03:09:18] [Инфо]: Размер оперативной памяти для вашего сервера: 4,000 MB.  [03:09:18] [Инфо]: Размер оперативной памяти требуемый сервером: 3,991 MB.  [03:09:18] [Инфо]: Размер оперативной памяти которая освободилась: 3,496 MB.  [03:09:18] [Инфо]: World "world": 256 чанков, 3 объектов, 560 тайлов. Всё в зад! Угараем дальше над ситуацией или будем уже системно разбираться, что тут происходит? Понимаете, НИЧЕГО не трогал в конфигурации между этими АВТОМАТИЧЕСКИМИ рестартами (новый функционал управления сервером). Что такого могло произойти в мирах игры, чтобы отожрать дополнительный Гигабайт ОЗУ?