Hi
wollte mal fragen wie man auf seinem server laggs vermeiden kann.
und was alles laggs verursacht.
Hi
wollte mal fragen wie man auf seinem server laggs vermeiden kann.
und was alles laggs verursacht.
server
bugs
i-net
ich zähl mal alles auf
eine schlechte internetverbindung
aufweändige scripte wie zb timer die kurz eingestellt sind durch die andauernden checks muss der server doppelt arbeiten
laggs können auch durch scriptfehler veruhrsacht werden
jeder einzelne spieler , je mehr leistung dein root oder dein pc hat auf dem der server läuft desto schneller läd auch alles
wenn mehrere sa-mp server auf einem root oder pc laufen muss das gerät auch mehr arbeiten somit können auch laggs entstehen
1. Zu Viele Timer.
2. Zu Vieles unter OnplayerUpdate da dies automatisch alle 2 sek glaube augerufen wird.
3. Zu Große Strings vermeiden bsp.
Nicht :
new string[512]; // 512 viel zu viel
format(string,sizeof(string),"%s Willkommen auf den Server");
SendClientMessage(playerid,FARBE,string);
Besser :
new string[64];
format(string,sizeof(string),"%s Willkommen auf den Server");
SendClientMessage(playerid,FARBE,string);
3. Glaube ich wenn du zu oft alle spieler Abfragst.
und was is wenn der server nur die hälfte macht? d.h. er fängt an, und hört mitendrin auf und es läuft zwar normal, aber alles reagiert viel später, also nicht nach 1er sekunde, wie im timer eingestellt, sondern nach irgendwie 30 sekunden oder so... auch die autos werden nicht richtig gespawnt etc.
dann hat dein root bzw dein pc eine cpu auslastung von 100%
wie du die tiefer bekommst kann ich dir leider nicht genau sagen weil es an verschiedenen sachen liegen kann wie zb die oben genannten
ok dann werde ich das mal mit den großen stings ändern,
weil bei mir sind viele die zu groß sind xD
kann es nur wegen großen strings zu fetten laggs kommen ???
UND es könnte auch daran liegen dass du bei Timer die mitm spieler zu tun haben SetTimer benutzt.
Benutze einfach SetTimerEx.
komisch das das passiert, vorgestern gings noch ohne probleme (und ohne veränderung am script!) und dann auf einmal das
was macht es für ein unterschied ob ich SetTimer oder SetTimerEx benutze
z.B. bei servernachricht alle 10 min
Zu viele Slots ebenso!
Falsch definierte MAX_PLAYERS
etc...
was macht es für ein unterschied ob ich SetTimer oder SetTimerEx benutze
z.B. bei servernachricht alle 10 min
SetTimerEx wird benutzt wenn der Timer nur eine bestimmte Person betreffen soll.
Server schlecht also vom Sponsor ?
Internetverbindung schechht..
2. Zu Vieles unter OnplayerUpdate da dies automatisch alle 2 sek glaube augerufen wird.
3. Glaube ich wenn du zu oft alle spieler Abfragst.
2. bei mir wird OnPlayerUpdate überhaupt nicht alle 2 sekunden aufgerufen.. es wird höchstens in SaveAccounts() aufgerufen und dort jede halbe stunde (1800000 ms)
3. und wie merkt man das? in den einzelnen timer?
SetTimerEx... bei mir ist alles in SetTimer, wie ist das gemeint mit "nur pro Spieler"? in den publics, die die Timer aufrufen, ist immer ein for drin..
MFG
2. bei mir wird OnPlayerUpdate überhaupt nicht alle 2 sekunden aufgerufen.. es wird höchstens in SaveAccounts() aufgerufen und dort jede halbe stunde (1800000 ms)
OnPlayerUpdate ist ein Standart-SA:MP Callback. Es wird immer aufgerufen wenn ein Spieler mit den anderen Clients synchronisiert wird - Das sind pro Sekunde ~ 20-50 Mal. Jeder der in diesem Callback Accounts updatet, ist einfach nur dumm.
oh sogar noch mehr.
Das Kann man ganz einfach testen Goldkiller hatte das Mal wo gepostet,mach einfach mal print("OnplayerUpdate wurde Aufgerufen"); in der
Public OnPlayerUpdate rein.
ZitatZu viele Slots ebenso!
Falsch definierte MAX_PLAYERS
etc...
eine frage wie kann man MAX_PLAYERS falsch definieren so das es auslastung bringt ? man kanns doch höchstens niedriger machen.
ZitatJeder der in diesem Callback Accounts updatet, ist einfach nur dumm.
lol ich bin dumm
eine frage wie kann man MAX_PLAYERS falsch definieren so das es auslastung bringt ? man kanns doch höchstens niedriger machen.
Bsp:
100 Slot Server
// MAX_PLAYERS ist auf 500
new gArray[MAX_PLAYERS];
/* 500 * 4 Byte = 2000 Byte */
Bessere Version:
#undef MAX_PLAYERS
#define MAX_PLAYERS 100
// MAX_PLAYERS ist auf 100
new gArray[MAX_PLAYERS];
/* 100 * 4 Byte = 400 Byte */
Und nein, OnPlayerUpdate wird maximal 50 Mal in der Sekunde aufgerufen, da bin ich mir sicher
achso .. ich dachte MAX_PLAYERS ist immer nur so Groß wie die Slots eingestellt sind O.o . Vielen Dank wieder was gelernt
Hier mal was zu den Bytes , da sieht man auch was Zeichen ausmachen
http://de.wikipedia.org/wiki/Byte