
数週間前からフロントエンドをサーバー上で実行しています (Angular Server Side レンダリング)。フロントエンドが 502 エラーに陥るという問題に何度も遭遇します。サーバーが確実に復旧するように、数時間ごとにサーバーを再起動する必要があります。トラフィックは異常ではなく、すべてが正常であるように見えます (コンソール ログではエラーなどはありません)。しかし、突然ダウンします。SSR サーバーを再起動すると、再び正常に動作します。Angular のサーバー側レンダリングの標準であるユニバーサル ライブラリを使用しています。何が問題なのでしょうか。何を監視する必要がありますか。RAM ですか。CPU ですか。他に何かありますか。
答え1
HTTP 502 は通常、1 つのサーバー (HTTP 502 応答の発信元) が別のサーバーと通信しようとして失敗したことを意味します。
「最初の」サーバー (最終的に 502 を発行するサーバー) を再起動すると問題が解決すると書かれていますが、これはおそらく、そのサーバーに何らかの非永続的な問題があることを意味します。
考えられる理由:
- メモリ不足: フロントエンド サーバーがバックエンドと通信するために新しいプロセスまたはスレッドを生成する必要がある場合、これを実行できない可能性があります。
RAM 使用率 (free -m、top) と RAM 制限 (グローバル (/etc/security/limits.conf) とプロセスごと (cat /proc/PID/limits、PID はプロセスの PID) の両方) を確認します。
- 開いている接続の数: フロントエンドにバックエンド サーバーへの開いている接続が多数ある可能性があります。これは、ある時点で新しい接続を開くことができなくなり、再起動するとそれらの接続が閉じられることを意味します。
(または他のポート)を実行しss -tlpnao | grep <backend server IP>
、接続数をsysctl net.ipv4.ip_local_port_range
およびの値と比較しますsysctl net.ipv4.tcp_fin_timeout
。
また、パケットの観点から何が起こっているかを確認するために を実行しますtcpdump -nni any host <backend ip> -v
。応答を受け取りましたか? 受け取った場合、どのような応答ですか? または、フロントエンドはバックエンドから応答を受け取らないだけですか? これは、根本的な原因を見つけるのに役立つ場合があります。