EFS ボリューム上の Ubuntu AMI を使用して Apache リクエストをハングさせる

EFS ボリューム上の Ubuntu AMI を使用して Apache リクエストをハングさせる

現在のプロバイダーからの移行を評価するために AWS (eu-south-1 リージョン) に作成したセットアップで、奇妙な動作に気付きました。共通の EFS ボリュームに保存されているファイルを提供しながら、Apache を介して Web リクエストを処理する 1-n EC2 インスタンスをデプロイしたいと考えています。RDS 部分、PHP パフォーマンス、ElasticCache 統合などは既に実装してテストしました。ただし、散発的なリクエストで 5 秒の遅延が発生していることに気付きました。この遅延は非常に決定論的で、5 秒の値に近すぎるようです。EFS ボリュームはバースト モードであり、クレジットは高く (2T)、使用率は非常に低いため、これが問題ではないはずです。

提案されたオプションを使用して EFS ボリュームをマウントしましたが、「EFS マウント ヘルパー」と「NFS クライアント」の両方で何も変わりませんでした。そこで、最初からやり直して、デフォルトの Apache Web サーバーだけをインストールし (Nginx でも同様の結果を試しました)、EFS ボリュームをマウントして、次のコマンドで別の EC2 インスタンスからベンチマークしてみました。

siege -c 2 -r 20 -b http://35.152.48.17/efs-mount-point/efs-test/logo.png

Ubuntu 18.04 および Ubuntu 20.04 では、最長トランザクションは常に 5 秒以上 (5.12 - 5.42 秒) です。一方、AmiLinux では、最長トランザクションは十分に高速です (0.15 秒)。興味深いことに、並列クライアントを 2 から 1 に減らすと、次のようになります。

siege -c 1 -r 20 -b http://35.152.48.17/efs-mount-point/efs-test/logo.png

Ubuntu でも、"siege" をさらに繰り返し実行しても、最長のトランザクションは問題ありません。

siege -c 1 -r 10000 -b http://35.152.48.17/efs-mount-point/efs-test/logo.png

ただし、Ubuntu で EFS 変数を削除し、ローカル EBS からファイルを提供すると、最長トランザクションが非常に高速 (数ミリ秒) になるため、問題は Ubuntu (18.04 と 20.04 の両方) の EFS でのみ発生します。提案されたマウント オプションは AmiLinux では機能しますが、Ubuntu AMI では何かが欠けている可能性があります。

再現手順は非常に簡単なので、私にとっては非常に奇妙に感じます。

  1. Ubuntu 18.04 AMI を選択します。
  2. EFS ボリュームをマウントします (「EFS マウント ヘルパー」または NFS クライアントを使用)。
  3. Apache をインストールし、サービングディレクトリのみを更新します。

なにか提案を?

答え1

ついに解決策を見つけました。

この問題はカーネル「5.4.0-1029-aws」および「5.4.0-1032-aws」でのみ発生します。この問題はカーネル バージョン「5.4.0-1034-aws」および「5.4.0-1035-aws」では解決されているようです。

したがって、カーネルをアップグレードするだけです。

sudo apt-get-update
sudo apt-get install linux-image-5.4.0-1035-aws

その後、再起動すると新しいカーネルが配置されているはずです。次のコマンドで確認します。

uname -r

次の結果が表示されます:

5.4.0-1035-aws

そうすれば、遅延は発生しなくなります。

関連情報