Туториал Как отследить высокую нагрузку на сервер

  • Автор темы Автор темы Rlemish
  • Дата начала Дата начала

Rlemish

Активный участник
Пользователь
Баллы
61
Имя в Minecraft
rlemish
Всем привет!
Рано или поздно каждый сервер сталкивается с проблемой высокой нагрузки на сервер. Все дело в архитектуре самого майнкрафта и отсутствия полноценного многопоточного ядра. Есть много проектов на эту тему, однако, это не всегда является решением. Т.к. высокая нагрузка может быть вызвана петлей в коде и какой бы мощный сервер у вас небыл - он будет проседать, иногда до нескольких TPS.
Итак, приступим.
Первое что нам поможет понять о том что наш сервер начал "лагать" это кол-во TPS, есть куча плагинов для измерения этого параметра. В нормальном состоянии это значение близко к 20, с тяжелыми модами 18-20. Если значение меньше нам помогут:

1) Самый просто способ понять что случилось это профайлер встроенный в WorldGuard
2017-02-09_08-59-39.png
5 минут WG будет собирать информацию о нагрузке, а параметр "-p" поможет получить ссылку для более читабельного вида отчета.
В отчете легко понять какой метод занимает процессорное время.
2017-02-09_09-04-37.png
2017-02-09_09-06-58.png

2) Бывает так, что сами игроки нагружают сервер или каких-то предметов слишком много в мире, тут нам может Opis.
Тут есть подробная информация:
2017-02-09_09-10-39.png 2017-02-09_09-10-56.png 2017-02-09_09-11-13.png 2017-02-09_09-11-38.png 2017-02-09_09-12-26.png 2017-02-09_09-12-37.png
Добавлю, что Opis может так же показать и нагрузку на клиент, это удобно при отладки его под слабые компьютеры.
 
Последнее редактирование:
3) Еще один инструмент схожий с Profiler WG, но более удобный по своему использованию VisualVM. Если сервер с GUI то можно запускать прям на нем. В противном случае нужно активировать JMXremote встроенный в JAVA, это можно сделать добавив аргументы при запуске сервера:
Код:
java -server -Xmx16G -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=HOST(нужно заменить на имя или IP) -Dcom.sun.management.jmxremote.port=9001 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
Далее указываем удаленный хост и подключаемся:
photo_2017-02-09_09-18-47.jpg photo_2017-02-09_09-18-43.jpg photo_2017-02-09_09-18-40.jpg

4) Небольшой мод TickProfiler так же может показать базовую нагрузку:
2017-02-09_09-28-40.png

P.S. Чуть позже покажу как отследить нагрузку энергии в IC2, которая обрабатывается целиком за тик и отследить этими средствами не представляется возможным.
 
Последнее редактирование:
А что на счет утечкек памяти? Как то чел жаловался на проблемы и ему не помог даже VisualVM.
 
А что на счет утечкек памяти? Как то чел жаловался на проблемы и ему не помог даже VisualVM.
Угу, ты прав не помог:(
И все еще не могу найти причины...
Утечку по GC как отловить ?
 
Можно снимать дампы, сравнивать их, посмотреть какие данные в памяти лежат, настроить триггеры. Зависит от сложности ситуации. В каждом случае свой подход, я описал общий подход к поиску.
 
А авторизацию кто настраивать будет? Хотите чтобы кто-попало мог в сервер залезть?
Пожалуйста, настраивайте =) Несколько атрибутов добавить нужно. Во вне лучше такие штуки вообще не открывать. Мы пользуемся VPN для доступа к внутренним ресурсам серверов. Если уж очень нужно, можно настроить ACL на внешний доступ. Вообще организация доступа к серверам - отдельная тема.
 
Вы тут людям сейчас насоветуете, они откроют доступ к своему серверу всем не зная того. Предупреждать нужно.
Сделайте лучше ) Вам только спасибо скажут, а пока... увы.
 
Да все равно же статья ничем не помогла. Как не понимали как юзать визуалвм, так и не поймут.
 
Так зачем тогда тема то?
Тут уже есть подобные темы где говорят какие плюшки юзать для проверки нагрузки. Чем эта тема отличается от них? Туториал как минимум должен быть для тех кто не шарит. А те кто умеют это использовать то что тут написано бесполезно. Лучше научи как GC нагрузку на озу отлавливать полноценно.
 
Назад
Верх