🔥 Оптимизация сервера. Сильно лагает

Можете дать какие-либо советы как умерить пинг при большом кол-ве игроков на сервере?
Аддонов не много (как и в мастерской).
Поставил тикрейт 12 - немного пинга меньше стало но при этом все равно не комфортно играть.

Когда играет 10-20 чел - пинг так скажем умеренный (~90)
Но стоит подключиться ещё 10 и больше игрокам и тут начинаются кокосовые танцы.
Пинг взлетает до 130 (у некоторых может больше, до 200 доходить вполне).
Может я не так настроил рейты? Прошу помощи :slight_smile:

кмдбубны

sv_maxrate “15000”
sv_mincmdrate “10”
sv_minrate “1500”
sv_minupdaterate “10”
sv_maxupdaterate “33”
sv_maxcmdrate “33”
sv_client_cmdrate_difference “1”
sv_client_predict “1”
sv_client_interpolate “1”
sv_client_min_interp_ratio “-1”
sv_client_max_interp_ratio “-1”

Если поможет как-то: стоит обычный сервер на майарене, Ryzen 9 5950X 1 ядро при 4.9ггц и 2гига озу

У других серверов как-то при 50 игроках пинг умеренный, а тут скачет как пульс после 5 банок энергетика… Как так же околдовать сервер на нормальный пинг при 50 клиентах ?

Пинг зависит от интернета игрока, от “расстояния кабелей” его компа к серверу и от загруженности самого сервера

Тикрейт

Временным(!) решением действительно может быть уменьшение тикрейта сервера, но оно создает неудобства для самих игроков (кстати тикрейт лучше выбирать 2^*, например 2,4,8,16,32,64 и тд). Чем меньше тикрейт – тем менее плавная игра, больше погрешностей в попаданиях игроков, движениях транспорта и тд

CPU: Single Thread Performance

Вторым решением может быть поиск сервера с более производительным процессором. Стремиться нужно к вершине этого списка: PassMark CPU Benchmarks - Single Thread Performance (гмод однопоточен и ему плевать на количество ядер, ему важно насколько “сильно” ядро по отдельности)

Хостинг > VDS/Dedicated

Если используется хостинг, а не VDS (с KVM виртуализацией. OpenVZ избегать) или не Dedicated сервер, то нужно понимать, что на сервере с тобой рядом почти наверняка “сидят” соседи, с которыми ты делишь мощность. Условно 1 ядро может использовать 2 игровых сервера и ты об этом не никак не узнаешь. Т.е. тут вариант: переезжать на VDS/Дедик, дружиться с консолью Linux

:1st_place_medal: FProfile

Но я рекомендую первым делом скачать FProfiler (упоминал его вот здесь. Кликни). Он поможет найти код, который больше всего грузит сервер. Если хочешь улучшить FPS, то профайли CLIENT, если пинг (т.е. оптимизировать серверный код), то соответственно, SERVER.

Как работает профайлер: он замеряет скорость выполнения вообще каждой функции, которая будет выполняться на сервере после старта профайлера. Т.е. если функция не выполнялась, то информации по ней не будет. Если тестировать на пустом сервере, то соответственно, очень много функций и не выполнится. Так что устанавливай и запускай тогда, когда на сервере уже будут лаги.

После запуска профайлинга сервер (или игра, если профайлить Client) станет лагать еще сильнее. Намного сильнее. Поэтому включай его секунд на 5-10, затем выключай и смотри результат.

Во вкладке Bottlenecks (узкие места) сверху будут функции, которые заняли больше всего времени на выполнение. За ними и нужно устроить охоту и передать разработчику на оптимизацию, либо просто выбрасывать “тяжелый” аддон

Привет. Начнём с поучений ( почувствовал себя дедом, который поучает жизни )
Ставить тикрейт 12 - плохая идея. Это повлияет на регистрацию попаданий ( на стороне игроков это просто не так заметно, ведь существует интерполяция ). 20-ти хватит для комфортной игры. Если что - он упадёт.
Производительность сервера лучше узнавать с помощью команды stats ( в консоли сервера ), т.к. пинг не подскажет, на стороне сервера ( в плане кода ) ли проблема.
Ну и так же, не следует думать, что это напрямую зависит от количества аддонов, ведь один аддон спокойно может вызывать проблемы, а остальные быть контентом/моделями.

Судя по описанию - похоже, что на сервере не убраны виджеты - Детальнее
Советую создать серверный файл ( любой_аддон/lua/autorun/server, либо же если используется DarkRP - darkrp_modules/любая_папка ), к примеру - sv_widgets.lua, содержимое должно быть следующим

hook.Add( "PreGamemodeLoaded", "TickWidgets", function()
	widgets.PlayerTick = function() end
	hook.Remove( "PlayerTick", "TickWidgets" )
end )

Так же, возможно, что описанная проблема проявляется за счёт физики/коллизии.
Для проверки - в такие моменты пропиши в консоли сервера команды

  1. Для удаления всех рагдоллов ( трупов ) - lua_run for _, e in ipairs(ents.FindByClass("prop_ragdoll")) do e:Remove() end
  2. Для заморозки всех энтити ( предметов ) - lua_run for _, e in ipairs(ents.GetAll()) do local p = e:GetPhysicsObject() if IsValid(p) then p:EnableMotion(false) end end

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

Ну и так же, как посоветовали выше - советую использовать FProfiler. По количеству вызовов функции ты увидишь, что выполняется чаще всего. Таким образом можно будет найти “сложные” участки кода. Если же используются аддоны, которые изменяют кости - тоже большая проблема, т.к. изменение костей на серверной части приводит с аномально странным нагрузкам.

Рейты же вряд-ли здесь помогут, т.к. они отвечают больше за другую часть. К сожалению, без информации поподробнее вряд-ли кто-то сможет что-то ещё подсказать

1 лайк

Благодарю вас за подсказки (кстати откл. виджетов у меня уже было :slight_smile: ).
Оказывается что проблемным участком был - Xenin battlepass. Он устраивал просто кошмар на улице вязов, вызывая аномальные полосы usermessages в нетграфе , а в фппрофиле - функции обращения к БД.

  • Небольшие нагрузки вызывают билли логи (тут относится к Deepstorage)
    И как , для меня, печальное - много ботлнеков касательно тфа пака

В скором времени планирую переехать на VDS с фул kvm, надеюсь это так же разгрузит ситуацию.

Это конечно немного не тот стрестест , ибо я тут лишь запустил 30 ботов, заспавнил разных нпс с тфа пушками и они друг друга убивают.
Но при этом моменте - пинг подскакивает до 150 (но не выше, как было раньше) , а нетграф в шоке от энтити

скрины


А тут если нпс и боты ничего не делают (кроме как бегают по карте с оружием):

скрин2

image

А ещё почему-то частенько вверх стремится зелёная полоска otherplayers, хотя боты по сути ничего то и не делают…

Тебе может понравиться эта идея: Телеграм боты, которые работают на Garry's Mod сервере (логи в Telegram/Discord)

Можно попробовать поковыряться в настройках и отключить ненужные.

Если будет не лень – скинь скрины, что именно в нем грузило

С ботами проводить тест не совсем правильно, поскольку они не спавнят маники, не выполняют какую-то работу, не покупают двери и т.д. На них также не срабатывают многие хуки и вообще многие функции и циклы обходят их стороной. Тест с реальными игроками будет очень сильно отличаться от теста с ботами


Ты смотришь тут вторую вкладку, которая показывает функции, что просто долго выполняются, но они не обязательно выполняются часто и могут не оказывать сильного влияния на сервер.

К слову, функция, которая выполняется 300 раз в секунду, но каждый раз 0.1 мс намного опаснее той, что вызвалась 1 раз, но выполнялась 5 мс, потому что в первом случае сервер потерял 300*0.1= 30 мс времени

Итак немного продолжу темку с итогами:
Переехал я на хосте арены на vds kvm с 1ядром i9 9900k за 800р, установка довольно легкая оказалась (учитывая что есть инструкция на вики майарены…).
Нагрузка по ресурсам - немного меньше чем на готовом сервере за полтора куска (учитывая луашки на оптимизацию).
Пинг - стал намного лучше. В ОСНОВНОМ у клиентов теперь 10-50пинга а не как на прошлом сервере пинг у всех начинался от 50. Т.е. все намного лучше. При 30чел - пинг крутится в среднем 70-80, на хосте за полтораху- крутилось в районе 120.
Думаю если еще урезать тфа пак, выкинув лишние функции можно добиться еще большего успеха и производительности.

Итог: VDS для крутых, готовый сервер - для тех кто не хочет вообще разбираться в убунту и с консолью.
Да, вам придется раз в 3 дня самому заниматься обновлением (apt update и тд) и прочим, нет веб-фтп удобного, нет “гибких настроек в пару кликов” но поверьте - нормальная производительность и пинг дороже стоит чем лёгкая панелька. Ничего сложного вообще нет.