AWS Elastic Beanstalk - 特定の時点で 300 を超える接続があると Puma サーバーでソケット障害が発生する

AWS Elastic Beanstalk - 特定の時点で 300 を超える接続があると Puma サーバーでソケット障害が発生する

AWS Elastic Beanstalk 環境で、おそらく奇妙な問題に対処しています。特定の時点で 1 つのインスタンスに 300 を超える接続があると、次の nginx エラーが発生します。

2018/03/23 20:56:53 [エラー] 5431#0: *4121 connect() to unix:///var/run/puma/my_app.sock が失敗しました (11: リソースが一時的に利用できません)。アップストリーム、クライアントへの接続中:

答え1

問題と構成を調べてみると、障害はリソース制限の超過に関連しています。おそらく OS リソースの 2 つが原因と考えられます。

  • オープンファイル記述子
  • 単一のユーザーが利用できるプロセス。プロセス制限を排除するには、EC2 インスタンスの nproc 値を非常に高い値または無制限に維持します。

    sudo vi /etc/security/limits.conf

参照するこのリンク簡単なアイデアです。したがって、worker_rlimit_nofile をサーバーに設定された ulimit より大きくすることはできないため、最初のアプローチは nginx パラメータを計算し、要件に応じて調整することです。

対応可能ですworker_processes * worker_connections / ( keepalive_timout * 2 ) users per second

このスケーリングガイド増やして定義すべき値を定量化するのに役立ちます。Web サーバーの値の定義が完了したら、制限をより高い値または同等の値に更新する必要があります。サーバーがどのユーザー同時実行まで機能するかを確認し、スケールアップに役立ててください。

関連情報