負荷テスト
Load Test
負荷テストとは、想定するアクセスや処理を発生させ、応答時間、エラー率、資源使用量などを測る試験です。想定ピークに耐えられるか、どこが詰まるか、負荷が下がった後に回復できるかを確かめます。
🐾 猫で例えると?
仲良しのアメショと茶トラが、同じハンモックにぎゅっと収まっています。2匹の重みで布地がたわむ様子を、アクセスが増えたシステムに見立ててみましょう。負荷テストでは、想定する利用人数や処理量を与えて、応答時間やエラーの増え方を確かめます。限界まで増やす試験もありますが、普段の利用量で問題なく動くかの確認も大切です。
💻 IT現場における「負荷テスト」とは?
Webサイトやアプリを公開した直後、テレビで紹介されたりSNSでバズったりしてアクセスが殺到し、「画面が真っ白になった」「購入ボタンが押せない」といったトラブルを見たことはありませんか?これを未然に防ぐのが負荷テストの役割です。
仮想利用者の数は目的に合わせて決めます。数を増やすだけでなく、実際の操作の割合や待ち時間、データ量を再現することが重要です。仮想利用者100人が毎秒100リクエストを送るとは限らず、応答時間とシナリオで発生量が変わります。
⚠️ 負荷テストの仕組みと注意点
一口に負荷テストと言っても、目的によっていくつか種類があります。日常的なピーク時を想定した「ロードテスト」、限界を超えてシステムがどう壊れるかを見る「ストレステスト」、長時間連続で負荷をかけ続ける「耐久テスト」などです。
本番との差を把握して結果を解釈する
小さな環境の試験でも、比較やボトルネックの発見には役立ちます。ただし、台数、データ量、キャッシュ、外部依存が違えば、その結果を本番の限界値としては扱えません。
// k6をインストールし、管理するローカルHTTPサーバーを8080番で起動した例
import http from "k6/http";
import { check, sleep } from "k6";
export const options = {
vus: 2,
duration: "10s",
thresholds: { http_req_failed: ["rate<0.01"] },
};
export default function () {
const response = http.get("http://127.0.0.1:8080/");
check(response, { "HTTP 200": r => r.status === 200 });
sleep(1);
} これは小さな負荷で動作を確かめる入口です。試験対象を管理できる環境に限定し、監視しながら段階的に負荷を増やします。平均応答時間だけでなく、p95など遅い側の値とエラー率も確認すると、利用者への影響を捉えやすくなります。
🛠️ 負荷テストを賢く実施するためのポイント
リリース直前に「実は全然アクセスに耐えられませんでした!」と発覚するのが最も恐ろしいパターンです。現場で失敗しないためのポイントを紹介します。
- 目標値を明確にする: なんとなくたくさんアクセスしてみるのではなく、キャンペーン時に予想される毎秒1000アクセスに3秒以内で応答するといった具体的な基準を設けます。
- 外部サービスへの影響に注意: 連携している外部の決済システムなどにそのまま負荷をかけると相手先のサーバーへの攻撃と同じになってしまうため、テスト用の環境を必ず用意しましょう。
- 壊れた後の挙動も確認する: 限界を超えてダウンした際、雷に怯えてソファーの下に隠れる茶トラのように、安全にシステムを遮断してフェイルセーフが働いているかも重要な確認ポイントです。
2匹で使うハンモックの余裕を確かめるように、負荷テストでは想定した使い方を再現します。同時利用数だけでなく、応答時間・エラー率・資源使用量を記録しましょう。負荷を下げた後に回復するかも確認すると、増強と復旧の判断に使えます。