パフォーマンステストをはじめたい


自己紹介

  • @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


k6


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 にアクセスすると以下を得られます。


おわり

ざっとですが、パフォーマンステストの種類、見る指標、負荷かけるツールなどを並べてみました。
運用に載せれるように、すこしずつ使って行きたいと思います。
具体的な数値の設計とかをちゃんと考えられるようになりたいです。