No.
2023-09-18
  • Jan
  • Feb
  • Mar
  • Apr
  • May
  • Jun
  • Jul
  • Aug
  • Sep
  • Oct
  • Nov
  • Dec
  • Sun
  • Mon
  • Tue
  • Wed
  • Thu
  • Fri
  • Sat
  • 27
  • 28
  • 29
  • 30
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Ch3. 基本的な負荷試験

TL;DR

パフォーマンスチューニングで実際にやること

  1. ベンチマーカーでWebサービスに負荷をかける
  2. ベンチマーカーによる計測結果を把握する
  3. 負荷試験実行中にWebサービスを実行している環境の負荷を観察する
  4. CPUなどのリソースを多く使用している要素を把握する
  5. Webアプリケーションのコードやミドルウェアの設定を修正する
  6. 1に戻る

Q

  • 負荷試験とは何か
  • 負荷試験はどのようにするのか
  • 負荷試験のためのツールは何があるのか
  • nginxのアクセスログで何がわかるのか
  • alpとは何か
  • abコマンドとは何か
  • スロークエリログとは何か

R

負荷試験とは何か

  • Webサービスの性能を測る指標
  • 負荷試験を行うアプリケーションのことをベンチマーカーという

負荷試験はどのようにするのか

  • 負荷試験用の環境を作り、そこでベンチマーカを実行する
    • 同じ環境でベンチマーカーを実行しても良いが、サービスのチューニングが進み、リクエスト数が増えるとベンチマーカーによる負荷が大きくなるので、なるべく別の環境で実行した方がいい

性能を測る方法

  • nginxのアクセスログを集計

nginxのアクセスログで何がわかるのか

  • 各URLのレスポンスタイム(=レイテンシ)の計測ができる
    • Webサーバーにリクエストが飛んだ時刻と、アプリサーバーからWebサーバにレスポンスが返ってきた時刻から算出できる
  • アクセスログはデフォルトだとcombinedという形式で保存される
    • このままだと使いずらいので、JSONに加工してから使われることが多い
    • nginxの設定ファイルでlog_formatディレクティブを変えることで対応可能
    • log_format json escape=json{必要な情報}

alpとは何か

  • アクセスログを集計・解析することができるツール
    • JSON,LTSV形式に対応している
  • URIやリクエストメソッドごとに次の情報を取得できる
    • ステータスコードごとのレスポンス回数
    • レスポンスタイムの最小・最大・平均・合計・パーセンタイル値
    • 返却したレスポンスサイズ(byte)の最小・最大・平均・合計
  • brew install alpでインストール可能

abコマンドとは何か

  • Apache HTTP Serverに付属する、HTTPベンチマーカー用のコマンド
  • 単一のURIに対してリクエストを送信する
  • apt install apache2-utilsでインストールできる

アクセスログのローテーションとは何か

  • ログファイルをファイルシステム上で別名に変更すること
    • 負荷試験実行ごとにログファイルを変えないと、どの負荷試験の結果について分析しているかがわからなくなるため
  • 実行中nginxに対しては、名前を変えるだけだと新しいログファイルが生成されない
    1. nginxを再起動orリロード
      • systemctl restart nginxで再起動、systemctl reload nginxでリロード
      • 再起動はわずかにダウンタイムがあるので、運用中のnginxに対してはおすすめできない
      • リロードにはダウンタイムはない
      • 再起動とリロードの違い:https://qiita.com/u310i/items/3b99b2dfb4897ca83374
    2. nginxのmasterプロセスにシグナルを送信

レイテンシとスループット

  • レイテンシが一定以下になったらスループットが重要になってくる
    • 具体的には10ms以下

スロークエリログとは何か

  • 一定時間以上かかったクエリのログを一覧取得できる、MySQLの機能
    • slow_query_logで有効にする
    • slow_query_log_file:スロークエリログの出力先ファイル名
    • long_query_time:指定した秒数以上のクエリのみ表示(0で全てのログが取得できる)
    • 設定の反映にはsystemctl restart mysqlでMySQLを再起動をする必要がある
  • 載っている情報
    • 実際に処理したSQL文
    • クエリの実行に要した経過時間(Query_time)
    • ロックを取得する時間(Lock_time)
    • クエリの実行結果としてクライアントに送信した行数(Rows_sent)
    • クエリを実行するためにMySQL内部で読み取った行数(Rows_Examined)
    • etc…