LoginSignup
1
0

More than 1 year has passed since last update.

ECS 負荷テストメモ

Posted at

ECS Fargateで動いているWEBアプリをシステム運用しており、同時600リクエストに耐えられるかどうかテストをしたのでそのメモ。

  • ECS FargateのTask定義(Memory, vCPU)と実行タスク数を微調整しながら Apache Bench コマンドで負荷テストを実施
  • WEBアプリは PHP 7.2 + Laravel + Apache
  • ApacheのPrefork設定はここでは触れない
  • 負荷テストのエンドポイントはDBに軽いSELECTを発行して200を返却するだけのプログラムを設置

Task数: 1, vCPU: 1, Mem: 2048MB で負荷テスト

ab -n 300 -c 300 https://foobar.com/database_health_check
Concurrency Level:      300
Time taken for tests:   48.329 seconds
Complete requests:      300
Failed requests:        0

まさにギリギリといった印象、一瞬の高負荷なためECSのAuto Scalingは動きませんでした。
試しに、これを2回連続で実行してみました。

ab -n 300 -c 300 https://foobar.com/database_health_check
Concurrency Level:      300
Time taken for tests:   45.789 seconds
Complete requests:      300
Failed requests:        16

ab -n 300 -c 300 https://foobar.com/database_health_check
Concurrency Level:      300
Time taken for tests:   31.643 seconds
Complete requests:      300
Failed requests:        237

おそらく最初の負荷テストでサーバーがダウンして、Cloud WatchのヘルスチェックがNGとなり、タスクが削除され、新しいタスクが起動されていました。もちろんその間リクエストは届きません。
CPUやメモリ使用率も100%になっていました。

Task数: 2, vCPU: 2, Mem: 4096MB で負荷テスト

タスクも常時2にして、スペックも上げたので
今度は倍にして600リクエストを並列で送ってみます

ab -n 600 -c 600 https://foobar.com/database_health_check
Concurrency Level:      600
Time taken for tests:   25.876 seconds
Complete requests:      600
Failed requests:        0

メモリはMaxで67%, Avgで54%
CPUもMaxで99%, Avgで37%

タスク2個ではこの辺が限界な気がするが、並列1,000リクエストでトライ

ab -n 1000 -c 1000 https://foobar.com/database_health_check
Concurrency Level:      1000
Time taken for tests:   46.078 seconds
Complete requests:      1000
Failed requests:        179

やはりだめでした。。。
メモリはMaxで92%, Avgで87%
CPUもMaxで99%, Avgで34%

2vCPUかつ4GBメモリのApacheで並列300リクエストが限界なのかなぁ。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0