メインコンテンツへスキップ
SDETRole
SDETRole

用語集 · パフォーマンス

負荷テスト(Load Testing)

英語: Load testing

別名: load test, ロードテスト, 負荷試験

定義

想定される実際のトラフィックをシステムにかけ、応答時間・エラー率・スループットが合意した目標を満たすかを確認する性能テストです。

負荷テストは、実際に想定しているトラフィック(一般的には通常時のピーク負荷)をシステムにかけ、その振る舞いを測定するテストです。測るのはレイテンシのパーセンタイル、エラー率、スループット、リソース使用量です。答えるべき問いは「計画している負荷のもとで性能目標を満たしているか?」であり、システムを壊すことが目的ではありません。それはストレステストの役割です。

例(k6)

import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  stages: [
    { duration: '2m', target: 100 }, // ramp up to 100 virtual users
    { duration: '10m', target: 100 }, // hold at expected peak
    { duration: '1m', target: 0 },    // ramp down
  ],
  thresholds: {
    http_req_duration: ['p(95)<500', 'p(99)<1200'],
    http_req_failed: ['rate<0.01'],
  },
};

export default function () {
  const res = http.get('https://staging.example.com/api/products');
  check(res, { 'status is 200': (r) => r.status === 200 });
  sleep(1); // think time between iterations
}

いずれかのしきい値(threshold)を超えると k6 は 0 以外の終了コードで終了するため、同じスクリプトを CI のゲートとしてそのまま使えます。

負荷・ストレス・ソーク・スパイク

種類 負荷のかけ方 答える問い
負荷(Load) 想定ピークを一定時間維持 通常のピーク時に目標を満たしているか?
ストレス(Stress) 想定を超えて段階的に増加 どこで、どのように壊れるか?復旧できるか?
ソーク(Soak) 通常負荷を数時間継続 時間とともに劣化しないか(メモリリーク、プール枯渇)?
スパイク(Spike) 急増した後に急減 突発的な負荷に耐え、元の規模に戻れるか?

正しく実施するためのポイント

  • 実際のトラフィックをモデル化する。 1 つの URL をループで叩き続けるのではなく、本番のアクセス解析で見られるエンドポイントの構成比、ペイロードサイズ、思考時間(think time)を再現します。
  • 本番相当の環境を使う。 スペック不足のステージング環境で得た結果は、その環境についてしか教えてくれません。
  • 平均ではなくパーセンタイルで判断する。 平均値は、ユーザーが実際に不満を感じる遅いテール部分を隠してしまいます。
  • サーバー側も監視する。 CPU、メモリ、データベース接続数、キューの深さを見れば、レイテンシが変化した理由がわかります。
  • 目標を先に合意する。 「毎秒 200 リクエストで p95 が 500 ms 未満」のような明確な目標がなければ、負荷テストは数値を出すだけで合否の判定ができません。

キーワードを入力すると SDETRole 全体を検索できます。

Pagefind による全文検索 · ブラウザ内で動作します 検索ページを開く →