■感想
ITに携わる人全員にオススメしたい本です。
その理由としては大きく2点あります。
1.サーバを構築してITサービスを展開することを前提に、システムパフォーマンスが全体的、体系的に書かれていること
全体的に本書は著者の業務経験によるものをベースに書かれていることが多いので、実用性が高いです。
私はこの本を読んで、例えば次のような構成でシステムが成り立っていたときに、
クライアント→Webサーバ→APサーバ→DBサーバ→ストレージ
各それぞれ、どういったところを見てパフォーマンスチューニングをしていけばいいかがわかりました。
あとはパフォーマンスチューニングの実践して経験を積んでいきたいと思います。
■メモ
第1章 パフォーマンスの基本的な考え方
<アルゴリズム>
O(logn)とは?
→nを2で何回割ったら1になるか
・ループ処理→O(n)
<レスポンスとスループットの違い>
レスポンス・・・いかに素早く反応を返せるか
→レスポンス重視は万能。レスポンスが早くなれば、普通、スループットも上がる
しかし、CPUのクロックやディスクI/Oの速度が頭打ちになっていることから
わかるように、物理的に早くするには限界がある
スループット・・・1回通信あたりに処理できる量
→同時に大量の処理をさばけるシステムをスループット重視のシステム
<ロック待ちを解決する方法>
・DBの表にロックをかけて、SQLを発行しているのであれば、
そのSQLを早く終わらせてあげれば、ロックを待っている時間が減る。
・ロックを分割する方法。DBの表にロックをかけるのではなく、行に対してロックをかけるようにする
第2章 パフォーマンス分析の基本
<分析タイプ>
・サマリ形式
→sarやvmstatのような、一定期間の情報を合計もしくは平均で見せてくれるツール
・イベント記憶形式
→個々の出来事を逐次記録する方式。パケットキャプチャやシステムコール記録
・スナップショット形式
→psコマンドやtopコマンドのようにその瞬間の状況を記録
<OSのコマンド>
・sar
→CPUの使用率とアイドル、読み書きI/Oの量、メモリの概況などがわかる
・vmstat
→実行待ちの平均プロセス数。何らかの理由で待たされている平均プロセス数。
スワップへのI/O、通常のI/O、コンテキストスイッチの回数
・ps
→主に、その瞬間にどんなプロセスが居るのか、その瞬間のプロセスの状態、
→-aオプションでその瞬間のソケット、-rオプションでその瞬間のルーティング情報
-iオプションでインターフェースごとの統計
・iostat
→ディスクの使用率がわかる。-xオプションにより、レスポンスタイムや各種キュー長が分かります。
・top
→リアルタイムでOS全体の状況を把握するのに最適なコマンド
・pstack
→そのプログラム(プロセス)がその瞬間にどんな処理を実行しているのかが分かります。
・strace
→どんなシステムコールで待っているのか、OSの何の関数で時間を使っているのか
第3章 実システムのパフォーマンス分析
・Webサーバのアクセスログ
・アプリ/APサーバのログ
<I/Oにかかる時間>
ハードディスクのアームが動く時間+回転待ちの時間+実際の読み書き時間
第4章 パフォマンスチューニング
<パフォーマンスチューニングの定石>
・設定は大きすぎても、小さすぎてもダメ。ほどほどに
・チューニングは1つずつ進める
・再利用することで速くする
→DBのコネクションプール、Webのキープアライブ、APサーバのスレッドプール
・まとめて処理する
・高速化と並列化
・スケールアップとスケールアウト
・ループの省略、キャッチボールの削減
・参照頻度の高いデータはキーバリューストア化かハッシュ化する
・参照頻度の高いデータは使う場所の近くに置く
第5章 パフォーマンステスト
<よくある失敗:9つのアンチパターン>
・本番環境でないと再現しない
・パフォーマンスが出ない!パフォーマンス問題が解決できない!
・環境差異を考慮しないために問題が発生
・負荷シナリオ設計に不備があるために問題が発生
・バッファ/キャッシュの利用を考慮しないために問題が発生
・シンクタイムを考慮しないために問題が発生
第6章 仮想化環境におけるパフォーマンス
<VM化とは?>
<観点>
・コンピューティングリソースを構成する技術要素は変わらない
・アクセスするネットワーキングとリソースの利用と提供の形態が変わる
<オンプレミス環境との変更点>
・オンデマンド、セルフサービス
・幅広いネットワークアクセス
・リソース共有
・スピーディな拡張性
・サービスが計測可能