Beim serverseitigen Rendering von Angular treten immer wieder Fehler vom Typ 502 auf.

Beim serverseitigen Rendering von Angular treten immer wieder Fehler vom Typ 502 auf.

Ich habe mein Frontend jetzt seit ein paar Wochen auf dem Server laufen (Angular Server Side Rendering). Ich stoße immer wieder auf dieses Problem, bei dem das Frontend mit einem 502-Fehler abstürzt. Ich muss den Server alle paar Stunden neu starten, um sicherzustellen, dass er wieder läuft. Der Datenverkehr ist nicht verrückt und alles scheint in Ordnung zu sein (in meinen Konsolenprotokollen – keine Fehler usw.), bis es plötzlich abstürzt. Sobald ich den SSR-Server neu starte, funktioniert er wieder einwandfrei. Ich verwende die Universalbibliothek, die der Standard für Server Side Rendering in Angular ist. Was könnte das Problem sein? Was muss ich überwachen? RAM? CPU? Etwas anderes?

Antwort1

HTTP 502 bedeutet normalerweise, dass ein Server (derjenige, von dem die HTTP 502-Antwort stammt) versucht hat, mit einem anderen Server zu kommunizieren, und dies fehlgeschlagen ist.

Sie erwähnen, dass ein Neustart des „ersten“ Servers (der letztendlich die 502 ausgibt) das Problem behebt, was wahrscheinlich bedeutet, dass auf diesem Server eine Art nicht persistentes Problem vorliegt.

Mögliche Gründe:

  • Speichererschöpfung: Wenn Ihr Frontend-Server einen neuen Prozess oder Thread starten muss, um mit dem Backend zu kommunizieren, ist er dazu möglicherweise nicht in der Lage.

Überprüfen Sie die RAM-Auslastung (free -m, top) und die RAM-Grenzwerte, sowohl global (/etc/security/limits.conf) als auch pro Prozess (cat /proc/PID/limits, wobei PID die PID Ihres Prozesses ist).

  • Anzahl offener Verbindungen: Möglicherweise hat Ihr Frontend viele offene Verbindungen zum Backend-Server, was bedeutet, dass es irgendwann keine neue Verbindung mehr öffnen kann und ein Neustart diese Verbindungen schließt.

Führen Sie ss -tlpnao | grep <backend server IP>(oder einen anderen Port) aus und vergleichen Sie die Anzahl der Verbindungen mit den Werten von sysctl net.ipv4.ip_local_port_rangeund sysctl net.ipv4.tcp_fin_timeout.

Ich würde auch einen ausführen, tcpdump -nni any host <backend ip> -vum zu prüfen, was aus Paketsicht vor sich geht. Erhalten Sie eine Antwort? Wenn ja, welche Art von Antwort? Oder erhält das Frontend einfach nie eine Antwort vom Backend? Dies kann Ihnen helfen, die Grundursache zu finden.

verwandte Informationen