Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Курилка / Yak floor (https://forum.zone-game.info/forumdisplay.php?f=16)
-   -   Один день из жизни сервера или "ОДМИН ЛОХАИТ!!" (https://forum.zone-game.info/showthread.php?t=38233)

n3k0nation 12.04.2015 10:31

Один день из жизни сервера или "ОДМИН ЛОХАИТ!!"
 
В один прекрасный день (не такой уж и прекрасный, так как до этого было несколько дней безудержного веселья, но это уже другая история), мне написал заказчик, мол, так и так, на замесах игроки ужасно лагают, есть очень сильное падение ФПС и вообще, все плохо, когда 5 кланов сталкиваются вместе.
Ну бывало и хуже, поэтому не долго думая, я взялся за задачу, и вот уже через полчаса, был написан сбор статистики по отправляемым и принимаемым пакетам. Все это дело поставилось на лайв во время очередного планового рестарта и на несколько дней все забыли про это, так как началась новая порция безудержного веселья с заказчиком и его сервером.
Через некоторое время, заказчик вспомнил о проблеме, так как некоторые кланы уже начали уходить с сервера. Вооружившись собранной статистикой и потратив час на ее визуализацию + фильтрацию, был получен такой график:
прием: https://dl.dropboxusercontent.com/u/62505455/rcv1.png
отправка: https://dl.dropboxusercontent.com/u/62505455/snd1.png
Ось Х - временная шкала, ось У - количество пакетов.

Сразу оговорюсь, что сервер базируется на l2j like сборке, поэтому проблема актуальна, скорее всего на всех сборках такого вида :)

Немного прифигев от увиденного (рейт отсылки StatusUpdate выше CharInfo более чем в 2 раза, madness!), я стал думать, что делать. На графике ясно видно всплеск трафика, конечно же понятно, что в моменты всплеска происходили самые жесткие замесы между игроками. Вывод напрашивался сам - уменьшить количество броадкаста пакета StatusUpdate и жестко контроллить одиночную отсылку данных только по изменению каких-либо параметров персонажа.
Окей, сказано - сделано.

Идем в пакет StatusUpdate и смотрим трейс вызова конструктора. Тааакс, видим то что есть основные броадкаст методы, которые перегружаются в классах-наследниках L2Character (что уже радует, так как не надо бегать по всему коду), ну и конечно же видим одиночные посылки статуса во всяких богомерзких хандлерах и т.д.
В броадкасте нифига ничего не контролируется, логика тупа, как носок сапога - дернули метод, отослали всем игрокам в радиусе. Ну окей. Копаемся дальше и находим очень интересный код, который пытается контролить отсылку статуса (правда почему-то для пати, ну да фиг с этим), немного изучив код, понимаем, что его писали какие-то маньяки-индусы с корнями китайских программистов. Не долго думая, я наштопал свой, достаточно простой, контроллер - вычисляем процентное количество текущих показателей персонажа с поправкой на размер окошка в игре (что было как-то странно сделано в том самом контроллере) и запоминаем его после каждого вычисления (не забыв перед этим посмотреть, было ли прошлое значение таким же, если было, то в сад отправку пакета), в принципе, почти тоже самое, что и было в изначальном контроллере, но без индусокода.
Залив изменения и отчитавшись заказчику, я уже было решил, что задача выполнена, но не тут то было. По логике, это избавило бы людей от множества повторных пакетов на фарме мобов/РБ, но никак не избавило бы от кучи пакетов в массовом замесе (пакет то броадкастится всем в зоне видимости!).
Решение было найдено довольно быстро. По сути, всем окружающим игрокам нафиг не нужен этот пакет, он требуется только тем игрокам, у которых текущий моб в таргете, плюс отметается сразу посылка от игрока игроку (за исключением пати). Просто сохраняем игроков, которые взяли нашего актера в таргет, в блокирующей коллекции и потом делаем рассылку только по этим игрокам. Гениально! Обычно размер такой коллекции довольно скромный :)

Собственно графики, которые включают предыдущие (что бы сразу можно было сравнить):
отправка: https://dl.dropboxusercontent.com/u/62505455/snd12.png

Почему только отправка? Потому-что, в данном случае, правилось именно по ней, да и статья имеет заголовок об одном дне :)

P.S: графики намеренно оставил в виде ссылок, т.к. каждая пикча довольно тяжелая (по 1 мб)

Influence 12.04.2015 10:54

Re: Один день из жизни сервера или "ОДМИН ЛОХАИТ!!"
 
Pointer*Rage, интересно было почитать, спасибо.

п.с. 90% разработчиков сказали бы "падает фпс? пусть новое железо купят", и даже не искали бы возможную причину.

n3k0nation 12.04.2015 10:58

Re: Один день из жизни сервера или "ОДМИН ЛОХАИТ!!"
 
Цитата:

Сообщение от Influence (Сообщение 392025)
Pointer*Rage, интересно было почитать, спасибо.

п.с. 90% разработчиков сказали бы "падает фпс? пусть новое железо купят", и даже не копали бы возможную причину.

Пожалуйста, у меня еще много историй из жизни :)

На самом деле мне изначально было ясно почему ФПС падает (т.к. сеть и рендеринг в клиенте работают в одном потоке), нужно было лишь найти бяку, из-за которой рейтинг трафика зашкаливает. Да и заказчик обмолвился словом, что другой разработчик исправил это дело - заменой сетевого движка (хренасе радикально, как поставить на жигули колеса от камаза) и отключением эффектов сосок, что мне очень не хотелось делать.

moveton 12.04.2015 11:11

Re: Один день из жизни сервера или "ОДМИН ЛОХАИТ!!"
 
Цитата:

Сообщение от Pointer*Rage (Сообщение 392026)
Пожалуйста, у меня еще много историй из жизни :)

На самом деле мне изначально было ясно почему ФПС падает (т.к. сеть и рендеринг в клиенте работают в одном потоке), нужно было лишь найти бяку, из-за которой рейтинг трафика зашкаливает. Да и заказчик обмолвился словом, что другой разработчик исправил это дело - заменой сетевого движка (хренасе радикально, как поставить на жигули колеса от камаза) и отключением эффектов сосок, что мне очень не хотелось делать.

А как насчет индивидуальной конфигурации пользователей, которая позволит не броадкастить пакет магикскиллюз при включении соулшотов?:)

n3k0nation 12.04.2015 11:14

Re: Один день из жизни сервера или "ОДМИН ЛОХАИТ!!"
 
Цитата:

Сообщение от moveton (Сообщение 392029)
А как насчет индивидуальной конфигурации пользователей, которая позволит не броадкастить пакет магикскиллюз при включении соулшотов?:)

Хорошая вещь, как и конфигурация отключения отображения трейдеров :) Очень не плохо бустит работу клиента (если конечно в сервере все держится на кноулистах и многопоточность почти не используется).
На самом деле, как видно на графике, MagicSkillUse имеет более или менее приемлемый рейт.

Retribution 12.04.2015 11:33

Re: Один день из жизни сервера или "ОДМИН ЛОХАИТ!!"
 
Гж программос) Продолжение будет ?:)

n3k0nation 12.04.2015 11:37

Re: Один день из жизни сервера или "ОДМИН ЛОХАИТ!!"
 
Цитата:

Сообщение от Retribution (Сообщение 392031)
Гж программос) Продолжение будет ?:)

Продолжение "дней"? :) Возможно, если все сложится удачно в следующем месяце, но это если же забегать вперед. Если отматывать назад, то могу написать еще какую-нибудь кулстори.

Influence 12.04.2015 11:37

Re: Один день из жизни сервера или "ОДМИН ЛОХАИТ!!"
 
Цитата:

Сообщение от Retribution (Сообщение 392031)
Гж программос) Продолжение будет ?:)

Эму нужно свой блог продвигать ;)
Интересно было бы почитать что то по мемори ликам, а то бывали приколы что утечка составляла около 10-30мб в час, а потом после перезагрузки сервера вообще пропадала, или в один прекрасный момент после сборки мусора так же пропадала(хотя наблюдалась достаточно долгое время)
Да и вообще любую полезную историю было бы интересно услышать :)

Drag0N 12.04.2015 12:13

Re: Один день из жизни сервера или "ОДМИН ЛОХАИТ!!"
 
Спасибо, познавательно!

Gaikotsu 12.04.2015 12:35

Re: Один день из жизни сервера или "ОДМИН ЛОХАИТ!!"
 
Цитата:

Сообщение от Pointer*Rage (Сообщение 392024)
многа букав

насколько я помню, в овере (в фениксе не помню уж) по тому же принципу сделана рассылка StatusUpdate - вычисления размеров баров хп/мп и т.д. и отправка пакета только если реально визуально будет видно изменение текущего значения, да и рассылка так же только тем кто реально это изменение может увидеть - выбравшие в цель и т.д.

З.Ы. правда в ГоД приходится и тупо всем в определенном радиусе данный пакет бродакастить в случаях когда объектом является моб - там то полоску хп над тушкой моба видно всем.


Текущее время: 12:16. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot