LAG excessivo no servidor [nгo й DDoS, e muito menos DoS] -
GabrielCOP - 02.03.2016
Olб! Recentemente, o
Cidade Social RPG (RPG criado do
zero) vem sofrendo bastante LAG do nada; de inнcio, eu achei que fosse a nossa mitigaзгo, mas segundo a prуpria empresa em que hospedamos (
One Cloud Service), ninguйm estб atacando (vale citar que a proteзгo anti DDOS da empresa й excelente).
Pensei tambйm ser algum
exploit, entгo eu adicionei no
server.cfg as linhas:
messageholelimit e
ackslimit.
Porйm, mesmo assim, o LAG comeзou (logo apуs um jogador ter saнdo do servidor,
DETALHE: foi DO NADA, pois houve saнda / entrada de jogadores no servidor antes deste em questгo).
Eu reiniciei o servidor e, para a minha surpresa, o LAG havia parado (foi aн que eu percebi que o LAG causado nгo era por um exploit).
Eu deduzi entгo que teria sido a minha include de salvamento, que havia sido atualizada hб pouco... Antes, eu estava usando variбveis globais para tudo, exemplo:
new File:bCini7_Archive_File; no inнcio da include, e nгo apenas nas funзхes em que ela й utilizada.
Isto poderia ter acarretado em algo? Em um loop infinito, ou algo deste tipo?
Vale citar que eu jб mudei tudo e jб fiz mais algumas mudanзas (na prуpria include bCini7), sendo que a include atual estб desta forma:
pawn Код:
// Include bCini7
#define bCini7_Open fopen
#define bCini7_Exists fexist
#define bCini7_Write fwrite
#define bCini7_Read fread
#define bCini7_Close fclose
#define bCini7_Create(%0) if(!bCini7_Exists(%0)) bCini7_Close(bCini7_Open(%0,io_write)) && bCini7_OpenArchive(%0)
#define bCini7_Delete(%0) if(bCini7_Exists(%0)) fremove(%0)
// Variables
stock bCini7_Archive_Name[64] = "null",bCini7_Archive_Line[100][64],bCini7_Archive_Value[100][64],bCini7_Lines_Archive = 1,bCini7_Line_ID,bool:bCini7_Archive_Is_Used,bCini7_File_Var[64];
// Definitions
stock bCini7_Archive_Format_2[128];
#define bCini7_SetInt(%0,%1,%2) format(bCini7_Archive_Format_2,128,"%d",%2) && bCini7_SetText(%0,%1,bCini7_Archive_Format_2)
#define bCini7_SetFloat(%0,%1,%2) format(bCini7_Archive_Format_2,128,"%.2f",%2) && bCini7_SetText(%0,%1,bCini7_Archive_Format_2)
#define bCini7_Log(%0,%1) new File:bCini7_File_Open_2 = bCini7_Open(%0,io_append); bCini7_Write(bCini7_File_Open_2,%1) && bCini7_Close(bCini7_File_Open_2)
// Used functions
stock bCini7_SetText(archive[],line[],value[])
{
if(bCini7_Lines_Archive ^ 100)
{
bCini7_Create(archive);
bCini7_OpenArchive(archive);
bCini7_Line_ID = GetSVarInt(line);
if(!bCini7_Line_ID)
{
SetSVarInt(line,bCini7_Lines_Archive);
bCini7_Line_ID = bCini7_Lines_Archive;
++bCini7_Lines_Archive;
}
strunpack(bCini7_Archive_Line[bCini7_Line_ID],line);
strunpack(bCini7_Archive_Value[bCini7_Line_ID],value);
bCini7_Archive_Is_Used = true;
}
return 1;
}
stock bCini7_ReadText(archive[],line[])
{
bCini7_OpenArchive(archive);
return bCini7_Archive_Value[GetSVarInt(line)];
}
stock bCini7_ReadInt(archive[],line[])
{
bCini7_OpenArchive(archive);
return strval(bCini7_Archive_Value[GetSVarInt(line)]);
}
stock Float:bCini7_ReadFloat(archive[],line[])
{
bCini7_OpenArchive(archive);
return floatstr(bCini7_Archive_Value[GetSVarInt(line)]);
}
stock bCini7_IsSet(archive[],line[])
{
bCini7_OpenArchive(archive);
return GetSVarInt(line);
}
stock bCini7_DeleteSet(archive[],line[])
{
if(bCini7_Exists(archive)) // Is needed
{
bCini7_OpenArchive(archive);
bCini7_Line_ID = GetSVarInt(line);
if(bCini7_Line_ID)
{
DeleteSVar(bCini7_Archive_Line[bCini7_Line_ID]);
bCini7_Archive_Line[bCini7_Line_ID][0] = 0;
bCini7_Archive_Value[bCini7_Line_ID][0] = 0;
bCini7_Archive_Is_Used = true;
}
}
return 1;
}
stock bCini7_Copy(archive_1[],archive_2[],bool:delete_archive)
{
if(bCini7_Exists(archive_1))
{
if(!bCini7_Exists(archive_2))
{
bCini7_OpenArchive(archive_1);
new bCini7_Archive_Format[128],File:bCini7_File_Open = bCini7_Open(archive_2,io_write);
for(new bCini7_Var_x; bCini7_Var_x <= bCini7_Lines_Archive; ++bCini7_Var_x)
{
format(bCini7_Archive_Format,128,"%s=%s\r\n",bCini7_Archive_Line[bCini7_Var_x],bCini7_Archive_Value[bCini7_Var_x]);
if(bCini7_Archive_Line[bCini7_Var_x][0])
{
if(bCini7_Archive_Value[bCini7_Var_x][0])
{
bCini7_Write(bCini7_File_Open,bCini7_Archive_Format);
}
}
}
bCini7_Close(bCini7_File_Open);
if(delete_archive == true)
{
bCini7_Delete(archive_1);
}
}
}
return 1;
}
stock bCini7_ChangeLine(archive[],line[],name[])
{
if(bCini7_Exists(archive)) // Is needed
{
bCini7_OpenArchive(archive);
bCini7_Line_ID = GetSVarInt(line);
strunpack(bCini7_Archive_Line[bCini7_Line_ID],name);
bCini7_Archive_Is_Used = true;
}
return 1;
}
// Unused functions
stock bCini7_OpenArchive(archive[])
{
if(strcmp(bCini7_Archive_Name,archive,false))
{
if(bCini7_Exists(archive))
{
bCini7_CloseArchive();
strunpack(bCini7_Archive_Name,archive);
new File:bCini7_File_Open = bCini7_Open(archive,io_read),bCini7_System_Lines[2];
while(bCini7_Read(bCini7_File_Open,bCini7_File_Var))
{
if(bCini7_File_Var[0])
{
if(bCini7_File_Var[0] >= 255)
{
strdel(bCini7_File_Var,0,1);
}
bCini7_System_Lines[0] = strlen(bCini7_File_Var);
if(bCini7_File_Var[bCini7_System_Lines[0]-1] == '\r' || bCini7_File_Var[bCini7_System_Lines[0]-1] == '\n')
{
bCini7_File_Var[bCini7_System_Lines[0]-1] = 0;
}
if(bCini7_File_Var[bCini7_System_Lines[0]-2] == '\r' || bCini7_File_Var[bCini7_System_Lines[0]-2] == '\n')
{
bCini7_File_Var[bCini7_System_Lines[0]-2] = 0;
}
bCini7_System_Lines[1] = strfind(bCini7_File_Var,"=");
strmid(bCini7_Archive_Line[bCini7_Lines_Archive],bCini7_File_Var,0,bCini7_System_Lines[1],bCini7_System_Lines[1]+1);
strmid(bCini7_Archive_Value[bCini7_Lines_Archive],bCini7_File_Var,bCini7_System_Lines[1]+1,bCini7_System_Lines[0]);
SetSVarInt(bCini7_Archive_Line[bCini7_Lines_Archive],bCini7_Lines_Archive);
++bCini7_Lines_Archive;
}
}
bCini7_Close(bCini7_File_Open);
}
}
return 1;
}
bCini7_CloseArchive()
{
if(!bCini7_Exists(bCini7_Archive_Name) || bCini7_Archive_Is_Used == false)
{
for(new bCini7_Var_x; bCini7_Var_x <= bCini7_Lines_Archive; ++bCini7_Var_x)
{
DeleteSVar(bCini7_Archive_Line[bCini7_Var_x]);
bCini7_Archive_Line[bCini7_Var_x][0] = 0;
bCini7_Archive_Value[bCini7_Var_x][0] = 0;
}
}
else
{
new bCini7_Archive_Format[128],File:bCini7_File_Open = bCini7_Open(bCini7_Archive_Name,io_write);
for(new bCini7_Var_x; bCini7_Var_x <= bCini7_Lines_Archive; ++bCini7_Var_x)
{
if(bCini7_Archive_Line[bCini7_Var_x][0])
{
if(bCini7_Archive_Value[bCini7_Var_x][0])
{
format(bCini7_Archive_Format,128,"%s=%s\r\n",bCini7_Archive_Line[bCini7_Var_x],bCini7_Archive_Value[bCini7_Var_x]);
bCini7_Write(bCini7_File_Open,bCini7_Archive_Format);
}
}
DeleteSVar(bCini7_Archive_Line[bCini7_Var_x]);
bCini7_Archive_Line[bCini7_Var_x][0] = 0;
bCini7_Archive_Value[bCini7_Var_x][0] = 0;
}
bCini7_Close(bCini7_File_Open);
}
bCini7_Archive_Name = "null";
bCini7_Lines_Archive = 1;
bCini7_Archive_Is_Used = false;
}
// End of include
Eu irei atualizar aqui se acontecer alguma queda novamente, mas, depois de ter atualizado isto tudo, por favor, me respondam o seguinte: Й possнvel que tenha sido a include antiga?
Por favor, responda aqui apenas se tiver uma resposta concreta e fundamentada!
Obrigado a todos.
Re: LAG excessivo no servidor [nгo й DDoS, e muito menos DoS] -
JonathanFeitosa - 02.03.2016
Utilize o crashdetect. Acho que seria mais objetivo e eficiente.
Re: LAG excessivo no servidor [nгo й DDoS, e muito menos DoS] -
PT - 02.03.2016
Ini estб ultrapassado. Aprenda algo que pode vir a usar em outras coisas que nгo sу samp (SQL) й utilize algo como SQLite e vera belas mudanзas no servidor.
Se precisar de ajuda pode falar..
Re: LAG excessivo no servidor [nгo й DDoS, e muito menos DoS] -
klap - 02.03.2016
Se quer velocidade... utilize uma versгo do MySQL assнncrona.
Re: LAG excessivo no servidor [nгo й DDoS, e muito menos DoS] -
PT - 02.03.2016
Quote:
Originally Posted by klap
Se quer velocidade... utilize uma versгo do MySQL assнncrona.
|
Nгo digas asneiras estamos a falar de samp e nгo de web, alem do mais na ъltima versгo do samp o SQLite foi atualizado ficando muito mais rбpido que anteriormente. Alйm do mais й nativo nгo precisas de qualquer plugin externo e consegues usar prepared statments. O que amplifica a бrea de desenvolvimento.
A ъnica coisa que muda de relevвncia e que se ele for ligar um servidor a DB do servidor й melhor usar MySQL mesmo assim tambйm й possнvel ligar a uma base de dados SQLite um site.
Ah e a DB MySQL й remota e a SQLite й local tambйm й essa umas das diferenзas
Re: LAG excessivo no servidor [nгo й DDoS, e muito menos DoS] -
WooPz - 02.03.2016
Quote:
Originally Posted by PT
Nгo digas asneiras estamos a falar de samp e nгo de web, alem do mais na ъltima versгo do samp o SQLite foi atualizado ficando muito mais rбpido que anteriormente. Alйm do mais й nativo nгo precisas de qualquer plugin externo e consegues usar prepared statments. O que amplifica a бrea de desenvolvimento.
A ъnica coisa que muda de relevвncia e que se ele for ligar um servidor a DB do servidor й melhor usar MySQL mesmo assim tambйm й possнvel ligar a uma base de dados SQLite um site.
Ah e a DB MySQL й remota e a SQLite й local tambйm й essa umas das diferenзas
|
asneiras й o que vocк estб falando. da pra notar sua falta total de conhecimento em SQL.
primeiramente quem entende de databases (persistкncia de dados) sabe que nunca arriscaria falar que SQL й mais moderno ou melhor que qualquer outra ferramenta. Primeiro й necessбrio ver a necessidade que a pessoa tem. SQLite, salvamento ficheiro e MySQL sгo para problemas
TOTALMENTE diferentes. vocк analisou isso? Nгo. pelos posts que vocк tenta passar algum conhecimento, falho, sobe o assunto vocк parece um fгnboy que levanta a bandeira do SQLite apenas por querer e nгo por necessidade.
segundo, seu argumento de MySQL ter que usar plugin й totalmente falho. Sscanf tambйm й um plugin, entгo й melhor usar format que й nativo? Falho.
SQLite й uma database acoplada e por esse motivo nгo da suporte a acesso a rede ou remoto, ao contrario do que vocк falou. e se vocк estб pensando na soluзгo de usar FTP para acessar o banco remotamente trata-se \de uma gambiarra e mal uso da ferramenta. SQLite tem suas vantagens, como armazenamos locais simples que nгo precisarгo ser acessados por outros dispositivos. O SQLite tambйm nгo й recomendado para queries muito grandes, complexas ou constantes sabe por que? Porque
nem tudo sгo flores. O buffer do SQLite usa [b]MUITA[b] memуria.
Como diferente de vocк eu gosto de me basear em argumentos e fontes verнdicas, deixo uma para minhas argumentaзхes sobre SQLite:
http://stackoverflow.com/questions/4...-how-to-decide
No caso de SA-MP e armazenamento de contas. Vamos analisar. Normalmente um servidor possui vбrios campos de salvamento como: organizaзгo, casa, veнculo, dinheiro, level, nнvel administrativo, skin, etc... A query sу tende a crescer conforme o servidor vai melhorando.
Tambйm SA-MP tem sistema de update dos dados dos jogadores, quem й frequente. Juntando a frequencia de salvamento mais as queries que tende a ser grandes. Fica уbvio que o custo de memуria tende a crescer no SQLite conforme o servidor cresce. Isso nгo й uma engenharia escalбvel (mas vocк nгo se importa com isso ne PT? Viva SQLite e pronto!!!!) A ferramenta de salvamento mais indicado й sem dъvida o MySQL. Mesmo se a pessoa nгo for fazer qualquer conexгo com ferramentas externas, como por exemplo websites.
E para finalizar, mas um erro seu. MySQL nгo й obrigatoriamente remoto. Muito pelo contrбrio, a maioria dos seu uso й localmente.
Muita gente pode nгo te questionar por nгo ter conhecimento e por vocк ser um membro antigo no fуrum porйm infelizmente vocк mais fala besteira de assuntos que claramente vocк nгo sabe do que informaзгo real mesmo. Se contenha a fala de SA-MP que talvez vocк se dк melhor. abraзos.
Re: LAG excessivo no servidor [nгo й DDoS, e muito menos DoS] -
PT - 02.03.2016
Mais um fan boy de MySQL. Ligam as pequenas coisas do SQLite. Sу para constar eu uso website com ligaзгo ao servidor e a minha DB e SQLite. Nгo pense que por ela ser local estб impossibilitado o acesso. Quanto аs querys duvido que no sa-mp alguйm use uma Query que o SQLite nгo suporte, se atй grandes servidores usam nгo serб um servidor Br com meia dъzia de gatos pingados que nгo podera usar.
Vocк pode falar o que quiser a mim pouco me importa.
Re: LAG excessivo no servidor [nгo й DDoS, e muito menos DoS] -
klap - 02.03.2016
Quote:
Originally Posted by PT
Nгo digas asneiras estamos a falar de samp e nгo de web, alem do mais na ъltima versгo do samp o SQLite foi atualizado ficando muito mais rбpido que anteriormente. Alйm do mais й nativo nгo precisas de qualquer plugin externo e consegues usar prepared statments. O que amplifica a бrea de desenvolvimento.
A ъnica coisa que muda de relevвncia e que se ele for ligar um servidor a DB do servidor й melhor usar MySQL mesmo assim tambйm й possнvel ligar a uma base de dados SQLite um site.
Ah e a DB MySQL й remota e a SQLite й local tambйm й essa umas das diferenзas
|
Sabes que podes usar mysql local ne? '-'
E eu sei que mysql й mais lento que sqllite derivado a ser nativo e bla bla
No entanto eu refirome a ligaзхes assincronas...
Ou seja .. ligacoes com 0 tempo de espera...
Devolve quando tem resultado e nao quando й pedido...
Isso й a soluзгo mais rapida que arranjas...
Deixa de ser fan boy do sql tu xD
A microsoft nao te paga xD
Ps: nunca fiz ligaзгo assнncrona para web...apenas em samp .. java e C#
Nem sei se й possнvel fazelo em php
Re: LAG excessivo no servidor [nгo й DDoS, e muito menos DoS] -
PT - 02.03.2016
Quote:
Originally Posted by klap
Sabes que podes usar mysql local ne? '-'
E eu sei que mysql й mais lento que sqllite derivado a ser nativo e bla bla
No entanto eu refirome a ligaзхes assincronas...
Ou seja .. ligacoes com 0 tempo de espera...
Devolve quando tem resultado e nao quando й pedido...
Isso й a soluзгo mais rapida que arranjas...
Deixa de ser fan boy do sql tu xD
A microsoft nao te paga xD
Ps: nunca fiz ligaзгo assнncrona para web...apenas em samp .. java e C#
Nem sei se й possнvel fazelo em php
|
Tu sim fizeste um comentбrio que vale apena realзar, й verdade tambйm й possнvel ser local й verdade. Quanto a SQL apenas gosto de usar o que й bom... XD. Em SQLite tambйm tens respostas com tempo de espera 0. Tudo depende da Query. O problema й que o pessoal esquece-se que isto й apenas um servidor de sa-mp nгo й nenhum ********.
Re: LAG excessivo no servidor [nгo й DDoS, e muito menos DoS] -
willttoonn - 02.03.2016
- O lag й geral?
- Verificou o consumo que o servidor estб dando para a mбquina?
- Qual as configuraзхes da mбquina?
- Quantos players o servidor estava quando aconteceu isso?