Server crasht auf VPS

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Server crasht auf VPS

      Hey Teeworlds Friends Community,
      aus Langeweile und Lust, habe ich mir eine Teeworlds Mod erstellt. Diese läuft unter meinem Windows PC auch problemlos stundenlang.
      Also habe ich das ganze auf meinem Linux VPS compiled (auch ohne Probleme).
      Server mit "screen" gestartet und zunächst lief das ganze auch. Sobald aber 2 Spieler gejoined sind stürzt das ganze meist ab.
      Jedoch nicht immer, manchmal können auch 3 Spieler eine Weile aktiv spielen, aber irgendwann stürzt es immer ab.
      Über Nacht, wo keiner drauf war, lief es problemlos für 10 Stunden.

      Infos zum VPS:
      - Linux Debian
      - 2 Cores (sind jeweils ungefähr immer zu 10 % ausgelastet)
      - RAM 6GB (meist so um die 300 MB genutzt)
      - 80Gbit/s Anbidung

      Danke für jede Hilfe/ Antwort U+2764
    • Windows ist nun mal nicht Linux! U+1F60A


      apt-get install gdb

      cd /root/teeworlds
      /root/bam/bam -c all
      /root/bam/bam server_debug

      screen -mS "PROZESSNAME" gdb /root/teeworlds/teeworlds_srv_d
      use shortcut Ctrl+a and then d
      re attach with screen -x PROZESSNAME
      write "run"
      use shortcut Ctrl+a and then d

      if you see the serv is down
      program received signal SIGSEGV, Segmentation fault.
      <adress> in function()
      in gdb
      backtrace
      you will see all call trace
      you will also see the code line
      where it crashed
      and if there are variables
      you can
      print var



    • Ich will echt nicht nerven, aber habe folgenden error bekommen:
      Program received signal SIGSEGV, Segmentation fault.
      0x00000000004351a8 in CCharacter::GetPlayer (this=0x0)
      at src/game/server/entities/character.h:67
      67 class CPlayer *GetPlayer() { return m_pPlayer; }

      Also habe ich backtrace benutzt und somit rausgefunden, dass diese Zeile grade die Funktion GetPlayer aufgerufen hat:

      pHit->TakeDamage(vec2(0.f, 0.f), (3 + GameServer()->GetPlayerChar(m_Owner)->GetPlayer()->m_AccData.m_Damage) * GameServer()->GetPlayerChar(m_Owner)->GetPlayer()->m_WarMachine, m_Owner, WEAPON_RIFLE);


      Finde das sehr komisch, weil der Laser die ganze Zeit problemlos funktioniert...
    • befrog57 schrieb:

      pHit->TakeDamage(vec2(0.f, 0.f), (3 + GameServer()->GetPlayerChar(m_Owner)->GetPlayer()->m_AccData.m_Damage) * GameServer()->GetPlayerChar(m_Owner)->GetPlayer()->m_WarMachine, m_Owner, WEAPON_RIFLE);
      Also wenn du sagst, dass es immer der gleiche Fehler sei überprüf doch mal ob das Ergebnis von GameServer()->GetPlayerChar(m_Owner) auch tatsächlich existiert bzw. nicht null ist.

      Der Aufruf über mehrere Pointer ist halt ein wenig unsicher, weil du dir eigentlich nicht immer 100% sicher sein kannst, dass auch alle existieren.

      Probier das mal aus und melde dich nochmal. :)
    • Hey Tim,
      danke für die Antwort.
      Also ich hätte lieber die ganze Funktion posten sollen. Es ist die ganz normale HitCharacter Funktion aus laser.cpp nur mit modifiziertem "TakeDamage".

      bool CLaser::HitCharacter(vec2 From, vec2 To)
      {
      vec2 At;
      CCharacter *pOwnerChar = GameServer()->GetPlayerChar(m_Owner);
      CCharacter *pHit = GameServer()->m_World.IntersectCharacter(m_Pos, To, 0.f, At, pOwnerChar);
      if(!pHit)
      return false;


      m_From = From;
      m_Pos = At;
      m_Energy = -1;
      pHit->TakeDamage(vec2(0.f, 0.f), (3 + GameServer()->GetPlayerChar(m_Owner)->GetPlayer()->m_AccData.m_Damage) * GameServer()->GetPlayerChar(m_Owner)->GetPlayer()->m_WarMachine, m_Owner, WEAPON_RIFLE);
      return true;
      }

      Trotzdem überprüfen ob GameServer()->GetPlayerChar(m_Owner) existiert ? Aber müsste der dann nicht immer exisitieren ? :S