ユーザ用ツール

サイト用ツール


jmeter:stress_test

文書の過去の版を表示しています。


負荷テスト

負荷テストの目的の明確化

  • 各種設定に問題がないか確認する
    基本的な動作が問題ないこと、明らかにおかしなスループットなどが計測されないこと、を確認する。
    * OSの設定
    * httpサービスなど、ミドルウェアの基本設定
    * DBのスロークエリ、インデックスなどの設定
    etc
  • 現在の構成でのスループットの上限を探る
    本番を想定したある程度の構築を行った段階で負荷テストを行い、「ここまでは大丈夫」という値を探す。
  • スケールアップ(スペックアップ)、スケールアウト(サーバ台数増加)対応
    いざ負荷が高くなったときにスケールアップ(スペックアップ)、スケールアウト(サーバ台数増加)で負荷軽減が可能か(負荷が移動するか)を確認する。

負荷試験

  • 静的ページへアクセスした際のスループットを取得
    一般的に数千のスループットが出るはずなので、出ない場合は設定を見直す。
    ab -c XXX -n XXX http://localhost/
  • フレームワークを利用したシンプルなページ(Hello World的なもの)へアクセスした際のスループットを取得
    この数値がフレームワーク使用時の最大スループットとなる。
    ab -c XXX -n XXX http://localhost/hello/

※注意 以下、認証処理などをパスする仕組みがソースに必要。 想定するユーザ数のダミーユーザ情報があることが望ましい。 複数ユーザのアクセスを確認するために、jMeterなどのツールでuseridを変数にしてシナリオ実行。

  • ユーザアクセスの多いページへアクセスした際のスループットを取得する
    e.g. マイページ
    ab -c XXX -n XXX http://localhost/mypage/userid=XXXXX
  • (主に参照系の)DBアクセスの多いページへアクセスした際のスループットを取得する
    e.g. デッキ作成(カード一覧)、クエスト一覧
    ab -c XXX -n XXX http://localhost/mydeck/userid=XXXXX
  • (主に更新系の)DBアクセスの多いページへアクセスした際のスループットを取得する
    e.g. ゲームリザルト
    ab -c XXX -n XXX http://localhost/resultk/userid=XXXXX

3~5にて。スループットの極端な低下、スロークエリ、インデックスの使われていないクエリ、LoadAverageの高騰などを確認する。

スロークエリ、インデックスの使われていないクエリ

# vi /etc/my.cnf
[mysqld]
~省略~
※以下追記
log_slow_queries
long_query_time = 1
slow_query_log_file=mysql-slow.log
log-queries-not-using-indexes

LoadAverageの高騰 topコマンド、sarコマンドなどで確認

スケールアップ(スペックアップ)、スケールアウト(サーバ台数増加)で負荷軽減が可能か(負荷が移動するか)を確認する。

関連しそうなカーネル設定のメモ

  • irqbalance
    # yum -y install irqbalance
    # service irqbalance start
    # chkconfig irqbalance on
  • RPS/RFS
    echo "f" > /sys/class/net/eth0/queues/rx-0/rps_cpus
    echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt
    echo 32768 > /proc/sys/net/core/rps_sock_flow_entries
  • sysctl
    vm.swappiness=0
    net.core.somaxconn=4096
    net.core.netdev_max_backlog=4096
    net.ipv4.tcp_max_syn_backlog=4096

負荷をかける側に必要な設定

# vi /etc/sysctl.conf 

net.ipv4.ip_local_port_range = 32768 65000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 10

# sysctl -p
jmeter/stress_test.1437641664.txt.gz · 最終更新: 2025/02/16 13:50 (外部編集)