自己紹介
- @mochizukikotaro
- 会社は
- AWS, Rails, CakePHP
- Staging は docker + k8s + GCP
- 僕は
- サーバサイド、フロントサイドのコードを書きます
- インフラは全然わかりません
- 開発環境を docker にするくらい
きっかけ
- Rails バージョンアップ
- memory 使用量が上がる
- 速度が遅くなる
- 広告のブースト
- アクセスできなくなる
Types of performance testing
- load testing
- stress testing
- endurance/soak testing
- spike testing
- others...
- 性能テスト
- 負荷テスト
- ストレステスト
- 耐久テスト
- スパイクテスト
- そのほかにも...
Load testing
特定の負荷を処理できることを確認する
Soak testing
継続的な負荷をあたえたときに、システムがどう動作するのか確認する
Spike testing
短期間大量アクセスの場合をしらべる
Stress testing
負荷をあげていって限界をしらべる
見る指標
- load average
- cpu
- memory
- Response time
- Request per second
見るツール
- top command
- AWS console
- mackerel
top command

有無を言わさずうつ key は
z
色がつきます
z x c b
htop command
最初から見やすい。とくにメモリ。
負荷のかけかた
- ab
- Apache JMeter™
- vegeta
- k6
vegeta
- https://github.com/tsenart/vegeta
- over 9000 stars
- Golang
k6
- https://github.com/loadimpact/k6
- Golang で出来ていて、シナリオを ES6 でかける
- Load Impact がつくっている
ab -c 10 -n 100 url
のように k6 run -v 10 -i 100 url
とすることもできますし、複雑なシナリオを(ES6で)書くこともできます。
サンプルシナリオを書いてみます。
最初は 同時接続 3 で、2秒かけて 5に 増やし、その後 4秒間で 8 まで増やし、その後...
tgif-sample.js
import encoding from "k6/encoding";
import http from "k6/http";
export let options = {
vus: 3,
stages: [
{ duration: "2s", target: 5 },
{ duration: "4s", target: 8 },
{ duration: "3s", target: 0 },
]
};
export default function() {
//let response = http.get("https://***.com/", { headers: { "Authorization": "Basic " + encoding.b64encode("user:pw") }});
let response = http.get("http://724c29d2.ngrok.io/");
};
実行は、 k6 run script.js
です。
k6 cloud
ベジータみたいにプロットされたデータが見れます。(一ヶ月無料トライアル... => https://loadimpact.com/pricing/)
コマンドは、 k6 cloud
です。
$ k6 cloud tgif-sample.js
/\ |‾‾| /‾‾/ /‾/
/\ / \ | |_/ / / /
/ \/ \ | | / ‾‾\
/ \ | |‾\ \ | (_) |
/ __________ \ |__| \__\ \___/ .io
execution: cloud
script: tgif-sample.js
output: https://app.loadimpact.com/k6/runs/111735
test status: Finished
output
URL にアクセスすると以下を得られます。
おわり
ざっとですが、パフォーマンステストの種類、見る指標、負荷かけるツールなどを並べてみました。
運用に載せれるように、すこしずつ使って行きたいと思います。
具体的な数値の設計とかをちゃんと考えられるようになりたいです。