No.
2023-09-18
- Jan
- Feb
- Mar
- Apr
- May
- Jun
- Jul
- Aug
- Sep
- Oct
- Nov
- Dec
Ch3. 基本的な負荷試験
TL;DR
パフォーマンスチューニングで実際にやること
- ベンチマーカーでWebサービスに負荷をかける
- ベンチマーカーによる計測結果を把握する
- 負荷試験実行中にWebサービスを実行している環境の負荷を観察する
- CPUなどのリソースを多く使用している要素を把握する
- Webアプリケーションのコードやミドルウェアの設定を修正する
- 1に戻る
Q
- 負荷試験とは何か
- 負荷試験はどのようにするのか
- 負荷試験のためのツールは何があるのか
- nginxのアクセスログで何がわかるのか
- alpとは何か
- abコマンドとは何か
- スロークエリログとは何か
R
負荷試験とは何か
- Webサービスの性能を測る指標
- 負荷試験を行うアプリケーションのことをベンチマーカーという
負荷試験はどのようにするのか
- 負荷試験用の環境を作り、そこでベンチマーカを実行する
- 同じ環境でベンチマーカーを実行しても良いが、サービスのチューニングが進み、リクエスト数が増えるとベンチマーカーによる負荷が大きくなるので、なるべく別の環境で実行した方がいい
性能を測る方法
nginxのアクセスログで何がわかるのか
- 各URLのレスポンスタイム(=レイテンシ)の計測ができる
- Webサーバーにリクエストが飛んだ時刻と、アプリサーバーからWebサーバにレスポンスが返ってきた時刻から算出できる
- アクセスログはデフォルトだとcombinedという形式で保存される
- このままだと使いずらいので、JSONに加工してから使われることが多い
- nginxの設定ファイルでlog_formatディレクティブを変えることで対応可能
log_format json escape=json{必要な情報}
alpとは何か
- アクセスログを集計・解析することができるツール
- URIやリクエストメソッドごとに次の情報を取得できる
- ステータスコードごとのレスポンス回数
- レスポンスタイムの最小・最大・平均・合計・パーセンタイル値
- 返却したレスポンスサイズ(byte)の最小・最大・平均・合計
- brew install alpでインストール可能
abコマンドとは何か
- Apache HTTP Serverに付属する、HTTPベンチマーカー用のコマンド
- 単一のURIに対してリクエストを送信する
apt install apache2-utils
でインストールできる
アクセスログのローテーションとは何か
- ログファイルをファイルシステム上で別名に変更すること
- 負荷試験実行ごとにログファイルを変えないと、どの負荷試験の結果について分析しているかがわからなくなるため
- 実行中nginxに対しては、名前を変えるだけだと新しいログファイルが生成されない
- nginxを再起動orリロード
systemctl restart nginx
で再起動、systemctl reload nginx
でリロード
- 再起動はわずかにダウンタイムがあるので、運用中のnginxに対してはおすすめできない
- リロードにはダウンタイムはない
- 再起動とリロードの違い:https://qiita.com/u310i/items/3b99b2dfb4897ca83374
- nginxのmasterプロセスにシグナルを送信
レイテンシとスループット
- レイテンシが一定以下になったらスループットが重要になってくる
スロークエリログとは何か
- 一定時間以上かかったクエリのログを一覧取得できる、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…