Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Один день из жизни сервера или "ОДМИН ЛОХАИТ!!"
#1
В один прекрасный день (не такой уж и прекрасный, так как до этого было несколько дней безудержного веселья, но это уже другая история), мне написал заказчик, мол, так и так, на замесах игроки ужасно лагают, есть очень сильное падение ФПС и вообще, все плохо, когда 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 мб)
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ
#2
Pointer*Rage, интересно было почитать, спасибо.

п.с. 90% разработчиков сказали бы "падает фпс? пусть новое железо купят", и даже не искали бы возможную причину.
Ответ
#3
Influence Написал:Pointer*Rage, интересно было почитать, спасибо.

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

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

На самом деле мне изначально было ясно почему ФПС падает (т.к. сеть и рендеринг в клиенте работают в одном потоке), нужно было лишь найти бяку, из-за которой рейтинг трафика зашкаливает. Да и заказчик обмолвился словом, что другой разработчик исправил это дело - заменой сетевого движка (хренасе радикально, как поставить на жигули колеса от камаза) и отключением эффектов сосок, что мне очень не хотелось делать.
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ
#4
Pointer*Rage Написал:Пожалуйста, у меня еще много историй из жизни Smile

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

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

Хорошая вещь, как и конфигурация отключения отображения трейдеров Smile Очень не плохо бустит работу клиента (если конечно в сервере все держится на кноулистах и многопоточность почти не используется).
На самом деле, как видно на графике, MagicSkillUse имеет более или менее приемлемый рейт.
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ
#6
Гж программос) Продолжение будет ?Smile
Ответ
#7
Retribution Написал:Гж программос) Продолжение будет ?Smile

Продолжение "дней"? Smile Возможно, если все сложится удачно в следующем месяце, но это если же забегать вперед. Если отматывать назад, то могу написать еще какую-нибудь кулстори.
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ
#8
Retribution Написал:Гж программос) Продолжение будет ?Smile

Эму нужно свой блог продвигать Wink
Интересно было бы почитать что то по мемори ликам, а то бывали приколы что утечка составляла около 10-30мб в час, а потом после перезагрузки сервера вообще пропадала, или в один прекрасный момент после сборки мусора так же пропадала(хотя наблюдалась достаточно долгое время)
Да и вообще любую полезную историю было бы интересно услышать Smile
Ответ
#9
Спасибо, познавательно!
Ответ
#10
Pointer*Rage Написал:многа букав
насколько я помню, в овере (в фениксе не помню уж) по тому же принципу сделана рассылка StatusUpdate - вычисления размеров баров хп/мп и т.д. и отправка пакета только если реально визуально будет видно изменение текущего значения, да и рассылка так же только тем кто реально это изменение может увидеть - выбравшие в цель и т.д.

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


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Русскоязычные сервера Discord и его проблемы 2021 (2022 - ...) No Name5 0 319 11-02-2023, 10:15 AM
Последний пост: No Name5
  Блог разработки сервера L2Liona Interlude L2Liona 0 1,298 10-19-2021, 09:08 PM
Последний пост: L2Liona
  Интиресует ли кого нибудь совместное развитие L2 сервера? AfterJob 0 1,005 03-05-2020, 06:07 AM
Последний пост: AfterJob
  ОС для сервера (опрос) ccc 5 1,878 07-24-2019, 10:34 PM
Последний пост: Serg Weider
  Ищу надежного напарника имеется 4 сервера ! iLee 2 1,604 08-10-2017, 11:05 PM
Последний пост: Alay
  Реклама сервера в группе ВК Lineage mifive 0 1,035 04-21-2017, 09:10 AM
Последний пост: mifive
  Ищу недорогой хост для тс3 сервера с защитой от дудоса moveton 2 1,687 11-19-2016, 05:21 PM
Последний пост: orogastus
  Нужны комментарии по концепту сервера gdialex 8 2,249 08-30-2016, 06:34 PM
Последний пост: Disenchanted
  Помогите ответить на несколько вопросов по поводу сервера OneThunder 13 3,464 08-23-2016, 02:07 PM
Последний пост: Kampina
  Ищу файлы сервера La2World VOLKyiv 0 1,090 07-31-2016, 10:19 PM
Последний пост: VOLKyiv

Перейти к форуму:


Пользователи, просматривающие эту тему: 3 Гость(ей)