zashii-1434

Stats of My Life(おいしい人生を味わうために、コツコツとチャレンジしたことを書くブログ)

「絵で見てわかるシステムパフォーマンスの仕組み」読みました。(2017年32冊目)

絵で見てわかるシステムパフォーマンスの仕組み

絵で見てわかるシステムパフォーマンスの仕組み

 

 

■感想 

 

ITに携わる人全員にオススメしたい本です。
その理由としては大きく2点あります。
 
1.サーバを構築してITサービスを展開することを前提に、システムパフォーマンスが全体的、体系的に書かれていること
 
2.いわゆる情報処理試験で出てくるような、スタックやキュー、アルゴリズム、レスポンス、スループット等々の説明が丁寧で理解しやすいこと
 
 
全体的に本書は著者の業務経験によるものをベースに書かれていることが多いので、実用性が高いです。
 
私はこの本を読んで、例えば次のような構成でシステムが成り立っていたときに、
 
クライアント→Webサーバ→APサーバ→DBサーバ→ストレージ
 
各それぞれ、どういったところを見てパフォーマンスチューニングをしていけばいいかがわかりました。
 
あとはパフォーマンスチューニングの実践して経験を積んでいきたいと思います。
  

■メモ

 
第1章 パフォーマンスの基本的な考え方
 
O(logn)とは?
→nを2で何回割ったら1になるか
 
・ループ処理→O(n)
・リストとループ処理→O(n)
・ツリーと検索→logn
・ハッシュアルゴリズム→O(1)
 
<レスポンスとスループットの違い>
 
レスポンス・・・いかに素早く反応を返せるか
→レスポンス重視は万能。レスポンスが早くなれば、普通、スループットも上がる
しかし、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化とは?>
1台の物理サーバ上に仮想的に複数台のサーバ(VM)を稼働させること
 
第7章 クラウド環境におけるパフォーマンス
 
<観点>
・コンピューティングリソースを構成する技術要素は変わらない
・アクセスするネットワーキングとリソースの利用と提供の形態が変わる
 
<オンプレミス環境との変更点>
・オンデマンド、セルフサービス
・幅広いネットワークアクセス
・リソース共有
・スピーディな拡張性
・サービスが計測可能