PrototypeX Posted December 28, 2016 Share Posted December 28, 2016 Привет всем. Случилось следующее. Запустили сервер, заказали рекламу. За 1 час зашло 150 человек и одновременно начали качать кэш (1.7 гб) Сервер стал нещадно проседать, запросы перестали отправляться. Сервер держался и держится упорно. У всех появились проблемы CD20 с таймаутами при загрузке кэша. К вечеру онлайн на половину уменьшился и все с горем пополам скачали кэш. Скажите, как можно распределить загрузку кэша? Как вообще сделать лучше? Ибо это жесткая проблема. Просто у нас хороший ресурс для рекламы, страшно представить что будет если 500 человек зайдет. База данных и сервер на одной машине, сама панель и сервер не лагали, лагали запросы к бд и загрузка кэша, с ней вообще отдельная песня. Как только все скачали кэш, на онлайне 120, сервер чувствует себя хорошо. Link to comment
Other Languages Moderators Disinterpreter Posted December 29, 2016 Other Languages Moderators Share Posted December 29, 2016 (edited) https://wiki.multitheftauto.com/wiki/Server_Manual#Configuring_an_external_web_server https://wiki.multitheftauto.com/wiki/Installing_and_Configuring_Nginx_as_an_External_Web_Server Edited December 29, 2016 by Disinterpreter Link to comment
K1parik Posted December 29, 2016 Share Posted December 29, 2016 кэш на отдельный сервер Link to comment
PrototypeX Posted December 29, 2016 Author Share Posted December 29, 2016 (edited) Короче дело такое Сервер располагается на VDS (канал 100 мбит/с) На сервере apache, mysql, mtasa server. Запросы формируются таким образом: fetchRemote("https://s1.************.ru/********.php", GetPlayerCars, "player_cars|"..getElementData(player, "player.id"), false, player) А в ответе: function GetPlayerCars(responseData, errno, source) if errno == 0 then if isElement(source) then local JSonBody = fromJSON(responseData) if tostring(JSonBody["status"]) == "ok" then if tonumber(JSonBody["count"]) > 0 then local cars_Count = tonumber(JSonBody["count"]) local car_Info = JSonBody["cars"] PlayerCarsToClient = "" for i in pairs(car_Info) do if tonumber(car_Info[i]["model"]) == 510 then cars_Count = cars_Count-1 end PlayerCarsToClient = PlayerCarsToClient..","..tonumber(car_Info[i]["id"]).."~"..tonumber(car_Info[i]["model"]).."~"..tostring(car_Info[i]["number"]) end PlayerCarsToClient = string.sub(PlayerCarsToClient,2) setElementData(source, "player.cars", tostring(PlayerCarsToClient)) setElementData(source, "player.carsCount", cars_Count) else setElementData(source, "player.cars", "") setElementData(source, "player.carsCount", 0) end elseif tostring(JSonBody["status"]) == "empty" then setElementData(source, "player.cars", "") setElementData(source, "player.carsCount", 0) end end end end Таким образом я реализовал весь мод. На необольшом онлайне все гуд. Дальше начинаются проблемы вида: запрос идет по 1,5 минуты. Например спавн машины занимает 1-1.5 мин. Сам сервер не ложится, сайт вообще без нареканий, база тоже. А вот сервер отправляет запрос ООЧЕНЬ долго. Таким образом все начали багаюзить, пользуясь задержками (отправлять множество одинаковых запросов) которые не успевают обработаться... Как быть? Рекламу дали бешенную, мод писали три месяца. Но теперь всё крахом бл**ть! Перенести кэш на другой сервер не получается С горем пополам вь**ал туда nginx, поставил ftp сервер который через раз работает. На нулевый debian 7, столько танцев с бубнами - ПИ**ЕЦ! Помогите кто нибудь мне срочно, заплатим денег, с доната, который идет бесконечно. Люди долбятся в баги и говорят что все нравится, мы на нервах, до праздника 1 день. ЖОПА ПОЛНАЯ, УЖЕ ГРЕШУ НА ВСЕ! И НА БАГИ мтА и так далее и на свои кривые видимо по всему судя РУКИ! После включения сервера счетчик игроков как ебн**ый 0-100 быстрее чем бугатти веерон набирает! ПОМОГИТЕ СТОЛЬКО СИЛ ВЛОЖИЛИ И ДЕНЕГ! Edited December 29, 2016 by PrototypeX Link to comment
Other Languages Moderators Disinterpreter Posted December 29, 2016 Other Languages Moderators Share Posted December 29, 2016 (edited) 18 minutes ago, PrototypeX said: Короче дело такое Сервер располагается на VDS (канал 100 мбит/с) На сервере apache, mysql, mtasa server. Запросы формируются таким образом: fetchRemote("https://s1.************.ru/********.php", GetPlayerCars, "player_cars|"..getElementData(player, "player.id"), false, player) А в ответе: function GetPlayerCars(responseData, errno, source) if errno == 0 then if isElement(source) then local JSonBody = fromJSON(responseData) if tostring(JSonBody["status"]) == "ok" then if tonumber(JSonBody["count"]) > 0 then local cars_Count = tonumber(JSonBody["count"]) local car_Info = JSonBody["cars"] PlayerCarsToClient = "" for i in pairs(car_Info) do if tonumber(car_Info[i]["model"]) == 510 then cars_Count = cars_Count-1 end PlayerCarsToClient = PlayerCarsToClient..","..tonumber(car_Info[i]["id"]).."~"..tonumber(car_Info[i]["model"]).."~"..tostring(car_Info[i]["number"]) end PlayerCarsToClient = string.sub(PlayerCarsToClient,2) setElementData(source, "player.cars", tostring(PlayerCarsToClient)) setElementData(source, "player.carsCount", cars_Count) else setElementData(source, "player.cars", "") setElementData(source, "player.carsCount", 0) end elseif tostring(JSonBody["status"]) == "empty" then setElementData(source, "player.cars", "") setElementData(source, "player.carsCount", 0) end end end end Таким образом я реализовал весь мод. На необольшом онлайне все гуд. Дальше начинаются проблемы вида: запрос идет по 1,5 минуты. Например спавн машины занимает 1-1.5 мин. Сам сервер не ложится, сайт вообще без нареканий, база тоже. А вот сервер отправляет запрос ООЧЕНЬ долго. Таким образом все начали багаюзить, пользуясь задержками (отправлять множество одинаковых запросов) которые не успевают обработаться... Как быть? Рекламу дали бешенную, мод писали три месяца. Но теперь всё крахом бл**ть! Перенести кэш на другой сервер не получается С горем пополам вь**ал туда nginx, поставил ftp сервер который через раз работает. На нулевый debian 7, столько танцев с бубнами - ПИ**ЕЦ! Помогите кто нибудь мне срочно, заплатим денег, с доната, который идет бесконечно. Люди долбятся в баги и говорят что все нравится, мы на нервах, до праздника 1 день. ЖОПА ПОЛНАЯ, УЖЕ ГРЕШУ НА ВСЕ! И НА БАГИ мтА и так далее и на свои кривые видимо по всему судя РУКИ! После включения сервера счетчик игроков как ебн**ый 0-100 быстрее чем бугатти веерон набирает! ПОМОГИТЕ СТОЛЬКО СИЛ ВЛОЖИЛИ И ДЕНЕГ! Ну я же выше кинул ссылки.... Пиши в телеграм, может помогу (@disinterpreter) Edited December 29, 2016 by Disinterpreter Link to comment
PrototypeX Posted December 29, 2016 Author Share Posted December 29, 2016 Just now, Disinterpreter said: Ну я же выше кинул ссылки.... Работаю в режиме НОНСТОП, сна 3 часа. Более 800 вопросов от игроков за 10 часов. В минуту 18-20 вопросов. Работаю один. Сижу сейчас работаю с мануалом. Как думаешь, это именно из-за кэша? Пробовал отключать ресурсы по очереди, в т.ч. содержащие все многовесные файлы кэша. Проблемы продолжали наблюдаться. Хостинг ihor. VDS (8гб озу, 4 ядра, 100 мбит/с) С чем вообще может быть это связано? У меня раздрай. 100к строк кода, куда смотреть чего глядеть, ужас! Есть время помочь? Скайп возможно? Link to comment
Other Languages Moderators Disinterpreter Posted December 29, 2016 Other Languages Moderators Share Posted December 29, 2016 Есть, скайпа нет. Link to comment
PrototypeX Posted December 29, 2016 Author Share Posted December 29, 2016 (edited) 3 minutes ago, Disinterpreter said: Есть, скайпа нет. Телеграмм: Error Sorry, you can only send messages to mutual contacts at the moment. Напиши что нибудь, пожалуйста: @prtypx Edited December 29, 2016 by PrototypeX Link to comment
Other Languages Moderators Disinterpreter Posted December 29, 2016 Other Languages Moderators Share Posted December 29, 2016 Ну есть еще дискорд Disi#5847 И XMPP [email protected] Link to comment
Misha_Konsta Posted December 29, 2016 Share Posted December 29, 2016 Сам игровой сервер находится на одном железе с веб-сервером, где распологается кэш? Link to comment
PrototypeX Posted December 29, 2016 Author Share Posted December 29, 2016 3 minutes ago, Misha_Konsta said: Сам игровой сервер находится на одном железе с веб-сервером, где распологается кэш? Да Link to comment
Misha_Konsta Posted December 29, 2016 Share Posted December 29, 2016 1 minute ago, PrototypeX said: Да Я конечно в этом деле не мастер, но мне кажется, что 100мбит канала при такой активности не хватит. Нужен отдельный веб-сервер, что бы от туда уже брать кэш для игроков, а не грузить и так уже забитый канал вдски, на которой висит игровой сервер Link to comment
PrototypeX Posted December 29, 2016 Author Share Posted December 29, 2016 1 minute ago, Misha_Konsta said: Я конечно в этом деле не мастер, но мне кажется, что 100мбит канала при такой активности не хватит. Нужен отдельный веб-сервер, что бы от туда уже брать кэш для игроков, а не грузить и так уже забитый канал вдски, на которой висит игровой сервер Да я это уже понял, ебусь с nginx'ом. Link to comment
Misha_Konsta Posted December 29, 2016 Share Posted December 29, 2016 (edited) 19 minutes ago, PrototypeX said: Да я это уже понял, ебусь с nginx'ом. Сервер "дохнет" от забитого канала. Купи просто ВДСку в другом месте (на пару дней копейки стоит, не суть), и настрой её отдельно как веб-сервер для кэша и ресурсов. И сайт лучше тоже отдельно держать, так как плохо настроенный веб-сервер в случае той же атаки на него - будет мешать работе игрового сервера. Edited December 29, 2016 by Misha_Konsta Link to comment
AfterAll14 Posted December 29, 2016 Share Posted December 29, 2016 (edited) 2 hours ago, PrototypeX said: Таким образом я реализовал весь мод. На необольшом онлайне все гуд. Дальше начинаются проблемы вида: запрос идет по 1,5 минуты. Если у Вас все написано в таком стиле, как Вы показали - то проблема может быть в злоупотреблении setElementData. Вообще использовать setElementData с синхронизацией данных для всех игроков Я бы советовал в исключительных случаях. Это загружает CPU на сервере в экспоненциальной зависимости от кол-ва игроков. PS. кстати, что за проект? PPS. случаем не оно ? Если да, то у меня для Вас плохие новости касательно радара) Edited December 29, 2016 by AfterAll14 Link to comment
PrototypeX Posted December 29, 2016 Author Share Posted December 29, 2016 6 minutes ago, AfterAll14 said: Если у Вас все написано в таком стиле, как Вы показали - то проблема может быть в злоупотреблении setElementData. Вообще использовать setElementData с синхронизацией данных для всех игроков Я бы советовал в исключительных случаях. Это загружает CPU на сервере в экспоненциальной зависимости от кол-ва игроков. PS. кстати, что за проект? https://vk.com/smotramtasa Link to comment
AfterAll14 Posted December 29, 2016 Share Posted December 29, 2016 (edited) Ок, зайду, гляну, может чего бросится в глаза. edit: или не зайду Edited December 29, 2016 by AfterAll14 Link to comment
PrototypeX Posted December 29, 2016 Author Share Posted December 29, 2016 5 minutes ago, AfterAll14 said: Ок, зайду, гляну, может чего бросится в глаза. edit: или не зайду Запущу в 21:00, сможешь наглядно увидить весь треш когда заходят 150 человек одновременно. Сейчас кэш конечно уже на другом сервере, но я думаю, проблема останется. Link to comment
Misha_Konsta Posted December 29, 2016 Share Posted December 29, 2016 (edited) 45 minutes ago, PrototypeX said: Запущу в 21:00, сможешь наглядно увидить весь треш когда заходят 150 человек одновременно. Сейчас кэш конечно уже на другом сервере, но я думаю, проблема останется. Вроде всё ок. Кэш качает, запросы обрабатываются без задержки Edited December 29, 2016 by Misha_Konsta Link to comment
Kenix Posted December 29, 2016 Share Posted December 29, 2016 (edited) Quote За 1 час зашло 150 человек и одновременно начали качать кэш (1.7 гб) Если у вас скачивается кэш таких размеров, то очевидно вы должны иметь большой канал, чтобы игроки могли скачивать файлы без проблем. Также влияет и вебсервер, который вы используете и как он настроен на защиту. Quote Сервер стал нещадно проседать, запросы перестали отправляться. Сервер держался и держится упорно. У всех появились проблемы CD20 с таймаутами при загрузке кэша. Может быть дело также и в самой оптимизации мода и запросов, используйте performancebrowser, чтобы узнать где у вас проблемы. Edited December 29, 2016 by Kenix Link to comment
Misha_Konsta Posted December 29, 2016 Share Posted December 29, 2016 Сразу видно, что игроки пытаются флудить различными способами, когда что то не работает. Можно попробовать увеличить ресурсы ВДС на время, посмотреть, какие ресурсы "едят" вдс, и на время поиска ошибки этих ресурсов - отключить их Link to comment
PrototypeX Posted December 29, 2016 Author Share Posted December 29, 2016 Увеличил ресурсы ВДС, кэш на другом сервере. ФПС стабилизировалось, теперь запросы идут по 1.5 минут, но уже без лагов для сервера. Link to comment
Misha_Konsta Posted December 29, 2016 Share Posted December 29, 2016 (edited) 6 minutes ago, PrototypeX said: Увеличил ресурсы ВДС, кэш на другом сервере. ФПС стабилизировалось, теперь запросы идут по 1.5 минут, но уже без лагов для сервера. Тогда надо искать ресурсы, которые нагружают сервер 51 minutes ago, Kenix said: performancebrowser ну и можно попробовать так же ограничить игроков в вызове определенных функций за какой то период, что бы не флудили и не нагружали еще больше, когда сервер уже серьезно нагружен Edited December 29, 2016 by Misha_Konsta Link to comment
PrototypeX Posted December 29, 2016 Author Share Posted December 29, 2016 performancebrowser я его немного выпилил с остальными стандартными ресами( есть у Вас он? Link to comment
Misha_Konsta Posted December 29, 2016 Share Posted December 29, 2016 Так он же в клиенте есть (если вы вместе с клиентом ставили сервер) Папка с игрой\server\mods\deathmatch\resources\[web] performancebrowser.zip https://wiki.multitheftauto.com/wiki/RU/Resource:Performancebrowser Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now