[Off] LAG excessivo no servidor [nгo й DDoS, e muito menos DoS]
#1

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.
Reply


Messages In This Thread

Forum Jump:


Users browsing this thread: 1 Guest(s)