現在のプロバイダーからの移行を評価するために 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 では何かが欠けている可能性があります。
再現手順は非常に簡単なので、私にとっては非常に奇妙に感じます。
- Ubuntu 18.04 AMI を選択します。
- EFS ボリュームをマウントします (「EFS マウント ヘルパー」または NFS クライアントを使用)。
- 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
そうすれば、遅延は発生しなくなります。