Foreverly

メモ帳

リソースグラフの見方

cactiとgrafanaのグラフの見方について調べました。

cactiグラフの見方

まずグラフを見るときは長いスパンでの確認と単位に気を付けること

サーバステータス・OS系

  • CPU Utilization
    • コアごとにCPU使用率を表示させる
  • Context Switches
    • サーバ側がカウンタなので、前回の処理からの差分を描画
    • 「Context Switches」はCPUでの処理対象プロセスなどの切り替え回数を示している。
    • プロセスの並列度が高く単位時間あたりの処理が多いシステムでは、値が大きくなる。
  • Forks
    • サーバ側がカウンタなので、前回の処理からの差分を描画
    • 「Forks」はプロセス処理であるForkの実行回数を示している。
    • プロセスの生成はCPUコストのかかる処理。
    • このグラフの値が常時大きい場合には、無駄なプロセス生成や外部プロセス呼び出しをしていないか、 必要だとしても、それをライブラリ呼び出しに変更できないか要検討
  • Interrupts
    • サーバ側がカウンタなので、前回の処理からの差分を描画
    • 「Interrupts」はネットワーク送受信などによる割り込みの数
    • ネットワーク送受信が多かったりすると増える。
  • Load Average
    • サーバ側の値をそのまま表示
    • 1 Minute Average:データ取得時点から直近1分間の実行街キュー数の平均値
    • 5 Minute Average:データ取得時点から直近5分間の実行街キュー数の平均値
    • ロードアベレージの値を読み解くのが難しいため、性能面の指標としては使うことができない。
    • 値の変化は状況の変化を表している。 負荷の指標としては、そのシステムが提供するサービス(HTTPなどの)応答時間をチェックする 性能の限界を越えると一気にロードアベレージの値が跳ね上がる。 急激な変化があった場合には、他の指標と見比べて、ボトルネックが発生していないか確認する。 ロードアベレージが高いから処理が遅くなることはありえず、処理がおそくなっていることがロードアベレージとして現れるという指標
  • Memory
    • Used Real:実メモリ使用量
    • Buffers:バッファとして利用中のメモリ容量
    • Cache:キャッシュとして利用中のメモリ容量
    • Unused Real:仮想メモリ使用量
    • Used Swap:Swapの読み書き量
    • Total Real:全メモリ容量
  • ディスク関連のグラフ
    • Disk Elapsed IO Time (ms)
    • サーバ側がカウンタになっているので、前回の処理からの差分を描画
    • IO Time:I/O時間
    • IO Time Weighted:I/O総所要時間
    • 「IO Time」に対して「IO Time Weighted」が大きい場合、ディスクI/Oに対して性能が不足している。
  • Disk Operations
    • サーバ側がカウンタになっているので、前回の処理からの差分を描画
    • Reads:ディスク読み込み要求数
    • Reads Merged:マージされたディスク読み込み要求数
    • Writes:ディスク書き込み要求数
    • Writes Merged:マージされたディスク書き込み要求数
    • 「Reads」+「Writes」=「Io Ops
    • 「Merged」はmergeされたI/O要求数
    • I/O処理を効率化するためにサーバがI/O要求をまとめることがある。
    • 基本的なI/O要求数は「Reads」と「Writes」で確認でき、「Merged」を見つけることで効率化の程度が確認できる
  • Disk Read/Write Time
    • サーバ側がカウンタになっているので、前回の処理からの差分を描画
    • Time Spent Reading 読み込みに要した時間
    • Time Spent Reading 書き込みに要した時間
    • Disk Sectors Read/Written
    • Sectors Read:読み込みセクタ数
    • Sectors Written:書き込みセクタ数
  • Disk Space
    • Used:利用中のディスク容量
    • Total:全容量
  • TCP Connection
    • サーバの値をそのまま表示
    • 「ESTABLISHED or CLOSE-WAIT」「ESTABLISHED」ステータスのソケット数、「CLOSE_WAIT」ステータスのソケット数
    • ESTABLISHED や CLOSE-WAITはプロセスがアタッチされた状態のため、
    • この数が大きいということはサーバ側の処理の並列数が高い
  • Network Traffic
    • サーバ側がカウンタで、前回の処理からの差分を描画
    • Inbound Inbound Traffic(受信)
    • Outbound Outbound Traffic(送信)
  • ネットワーク帯域利用量
    • 数値が頭うちになっていれば、ネットワーク帯域不足
  • APC cache purges
    • Alternative PHP Cache (APC) は、PHP の実行コードをキャッシュする仕組み
    • ファイルキャッシュと、ユーザのキャッシュでAPCがキャッシュを削除したサイズ
  • APC file cache hits and misses
    • Hits:ファイルキャッシュのヒット率
    • Misses:ファイルキャッシュのミス率 キャッシュヒットとは、命令処理に必要なデータがキャッシュメモリに存在し、キャッシュメモリからデータを読み込むことができることです。 またキャッシュミスとは、命令処理に必要なデータがキャッシュメモリに存在せず、キャッシュメモリからデータを読み込むことができないことです。 キャッシュミスの場合、メインメモリ等にデータを探しに行きます。
  • APC file cache memory
    • OP CODE Cache: opcodeキャッシュにキャッシュされたファイル
    • User Itmes Cache:ユーザーおよびアイテムがキャッシュ
    • Memory Limit:APCキャッシュメモリの上限
  • APC user cache hits and misses
    • Hits:ユーザキャッシュのヒット率
    • Misses:ユーザキャッシュのミス率
  • Apache Bytes
    • Bytes Sent:送信バイト数
    • Apacheが送信したバイト数
  • Apache CPU Load
  • Apache Requests
    • 発生したリクエスト数
  • Apache Scoreboard
    • Apacheリクエストの管理状態を表示 pacheで実際にHTTPリクエストを処理するエンティティを「スロット」と呼ぶ。そして、スロットを集めたApacheのリクエスト処理の管理状態の記録をスコアボードと呼ぶ。 スコアボードは、処理系にもよるが、大抵はOSの共有メモリを利用しており、リクエスト処理をするプロセス間で共有可能な記憶領域となっている。 共有メモリが利用できない一部の旧式な処理系では、ファイルで管理するらしい。 [Apacheスコアボードの監視とチューニング ](http://www.ginnokagi.com/2008/03/apache.html
  • Apache Workers
    • Idle workers:アイドルなプロセス数
    • Busy workers:ビジーなプロセス数 負荷が高い時間帯にIdleWorkersがゼロになる率が高い場合はMinSpareServersの値が小さいということになります。もっと大きい値にして、プロセス生成のオーバーヘッドを下げてやる必要があります。 負荷が高い時間帯にIdleWorkersが大きな値を示している場合はプロセス=メモリーが無駄使いされていることになりますから、MinSpareServersをもっと小さい値にします。その分のメモリーをバッファキャッシュ等に回してほうがよい。 mod_statusでapacheの稼働状況を記録する

MySQL

ステータス関連のグラフ

  • MySQL Command Counters※Max 500
    • Questions:総ステートメント実行回数
    • Com xxx :xxxステートメントを実行した回数 SELECT文が実行された場合は「Com Select」がカウントアップ。 ただし、クエリキャッシュにヒットした場合は「Questions」に計上されるが「Com Select」には計上されない このグラフからのSQLの量・内容・集中傾向を確認することで、チューニングの手がかりになる。
  • MySQL Connections※Max 120
    • サーバ側の値をそのまま表示しているもの
    • Max Connections:設定上の最大コネクション数
      • 起動して以来の最大同時コネクション数
    • Max Used Connections:最大同時接続コネクション数
    • Threads Connected:接続中のコネクション数
      • 同時接続数 コネクションプールを使うと「Threads Connected」は多いものの。Connections」は少なくなる。
    • サーバ側がカウンタになっていて、前回の処理からの差分を描画しているもの
    • Aborted Clients:接続できたが切断されたコネクションの数
      • 接続が正常にできていたものの、「WAIT_TIMEOUT」や「INTERACTIVE_TIMEOUT」などにより、
      • 切断されたコネクションの数
    • Aborted Connects:接続できなかったコネクションの数
    • Connections:接続されたコネクションの数
  • MySQL Files and Tables※Max 2.0k
    • サーバ側の値をそのまま表示
    • Table Cache:テーブルキャッシュサイズ
    • Open Tables:開いたことのあるテーブル数
    • Open File:開いたことのあるファイル数
    • Opend Tables:今開いているテーブル数
  • MySQL Handlers※Max 600k
    • サーバ側がカウンタになっているので、前回からの処理からの差分を描画
    • Handler Write:「INSERT」の要求回数
    • Handler Update:「UPDATE」の要求回数
    • Handler Delete:「DELETE」の要求回数
    • Handler Read First:最初のエントリがインデックスから読み込まれた回数
      • この項目が多いときは、フルスキャンが多いかもしれないので要確認
    • Handler Read Key:キー(インデックス)に基づく読み込み回数
      • この項目が多いときは、適切にインデックスが付与されている証拠なのでいい傾向
    • Handler Read Next:キー順序での次レコードの読み込み要求回数
    • Handler Read Prev:キー順序での前レコードの読み込み要求回数
      • NextとPrevは範囲指定をしてインデックスカラムをスキャンした場合に増える
    • Handler Read Rnd:固定位置に基づくレコードの読み込み要求回数
      • SQL結果をソートすることが多い場合に増える。テーブルスキャンが多いか、インデックスなしの「JOIN」が多く、インデックスが適切に付与できていない可能性がある。
    • Handler Read Rnd Next:データファイルでの次レコードの読み込み要求回数
      • この項目が多いときは、テーブルスキャンが多く、インデックスが適切に付与できていない可能性あり
  • MySQL Network Traffic※Max i.0M
    • サーバ側がカウンタになっているので、前回の処理からの差分が描画
    • Bytes Sent:MySQLからクライアントに送信したデータ量
    • Bytes Received:MySQLがクライアントから受信したデータ量。 単位がbytesなので注意(bitではない)通常はSentが圧倒的に多いが、SQLが長い、または投入データが大きい場合はReceivedも大きくなる。
  • MySQL Processlist※Max 4.0
    • サーバ側の値をそのまま表示
    • State Closing Tables:データをディスクにフラッシュしテーブルをクローズ中
    • State Copying To tmp Table:メモリ上の一時テーブルにデータをコピー中
    • State End:データ操作処理中
      • SQL文の「ALERT TABLE」、「CREATE VIEW」、「DELETE」、「INSERT」、「SELECT」、「UPDATE」の終了処理(クリーンアップ前)の状態
    • State Freeing Items:アイテム開放処理中
      • クリーンアップの次の工程で、クエリキャッシュを含めたいくつかのアイテムを開放している状態です。
    • State Init:SQL実行のための初期化中
      • SQL文の「ALERT TABLE」、「CREATE VIEW」、「DELETE」、「INSERT」、「SELECT」、「UPDATE」の実行準備中の状態
      • 具体的にはバイナリログやInnoDBログのフラッシュ、クエリキャッシュのクリーンアップ等を実行しています。
    • State Locked:ロックされている(ロック開放待ち)
      • 「State」が「Locked」、「Table lock」、「Waiting for .*lock」の合算。
      • ここでリストアップされていないものは「State Other」にすべて計上されている。
    • State Login:ログイン(認証処理など)処理中
    • State Preparing:クエリオプティマイザ実行中
    • State Reading From Net:ネットワークからSQLを読み込み中
    • State Sending Date:SELECTによるデータ読みこみ、またはクライアントへのデータ送信中
    • State Sorting Result:一時テーブルを利用しないsort処理中
    • State Statistics:SQL実行計画決定の為の統計処理中
    • State Updating:UPDATEのためのデータ探索中またはUPDATE処理中
    • State Writing To Net:ネットワークへデータを草子中
    • State None:Stateなし
      • 「State」に値が設定されていないスレッド。
      • 例えばSLEEP中のスレッド等が該当します。
      • トランザクション内でSQLSQLの間もSLEEPになるので「State None」に計上されます。
    • State Other:その他
  • MySQL Thread※Max 8
    • サーバ側の値をそのまま表示しているものと、サーバ側がカウンタとなっていて、前回の処理からの差分を描画しているものがある。
      • サーバ側の値をそのまま表示
      • Thread Cache Size:スレッドキャッシュのサイズ
      • Thread Connected:接続中(利用中)のスレッド数
      • Threads Running:実行中ステータスのスレッド数
      • Threads Cached:キャッシュされていたスレッド数
    • 前回からの差分を描画
      • Threads Created:生成されたスレッド数 「Threads Created」が高い値を示し続けるなら、 「Thread Cache Size」を増やすと処理が効率化できるかもしれない。
  • MySQL Transaction Handler※Max600
    • サーバ側がカウンタになっているので、前回の処理からの差分を描画
    • Handler Commit:コミット要求数
    • Handler Rollback:ロールバック要求数
    • Handler Savepoint:セーブポイント要求数
    • Handler Savepoint Rollback:セーブポイントロールバック要求数 どの数値が多いから異常ということはないが、想定範囲から大幅に外れていないか確認は必要

性能関連のグラフ

  • MySQL Query Cache※Max 10k
    • サーバ側の値をそのまま表示
      • Qcache Queries In Cache:キャッシュに格納されているSQL
    • サーバ側がカウンタになって、前回の処理からの差分を描画
      • Qcache Hits:キャッシュヒットしたSQL
      • Qcache Inserts:キャッシュに新しく登録されたSQL
      • Qcache Not Cached:キャッシュしないSQL
      • Qcache Lowmem Prunes:キャッシュ容量不足によりキャッシュから削除されたSQL数 「Qcache Lowmem Prunes」が発生しているようであれば、クエリキャッシュのサイズを調整することで処理が効率化できるかもしれない 合計SQL数は「Qcache Inserts」+「Qcache Hits」+「Qcache Not Cached」
  • MySQL Query Cache Memory
    • サーバ側がカウンタで前回の処理からの差分を描画
    • クエリキャッシュではブロック長は可変なので、「Qcache Free Memory」が多くも、
    • 「Qcache Free Blocks」が少ないと、キャッシュできるSQL数は少なくなる。
    • Qcache Cache Size:クエリキャッシュのサイズ
    • Qcache Free Memory:クエリキャッシュの空き容量
    • Qcahce Total Blocks:クエリキャッシュの総ブロック数
    • Qcache Free Blocks:クエリキャッシュの空きブロック数
  • My Select Types
    • サーバ側がカウンタで前回の処理からの差分を描画
    • Select Full Join:インデックスを利用しないJOINの数
    • Select Full Range Join:関連テーブルで範囲検索したJOINの数
    • Select Range:ファーストテーブルを範囲検索した部分を利用したJOINの数
    • Select Range Check:インデックスなしのJOINの数
    • Select Scan:ファーストテーブルでフルスキャンを実行したJOINの数 Select Full JoinとSelect Range Checkが0でない場合は、インデックスを見直す。
  • MySQL Sorts
    • サーバ側がカウンタで前回の処理からの差分を描画
    • Sort Rows:ソートしたレコード数
    • Sort Range:範囲指定ソートの回数
    • Sort Merge Passes:ソートで必要としたマージパスの回数
    • Sort Scan:テーブルスキャンでソートした回数
  • MySQL Table Locks
    • サーバ側がカウンタで前回の処理からの差分を描画
    • Table Locks Immediate:テーブルロックを直ちに実行した回数
    • Table Locks locks Waited:テーブルロックを実行するとき待ちが発生した回数
    • Slow Queries:スロークエリの数 テーブルロックが発生すると処理の並列度が著しく下がるため、「Table Locks Waited」が0になるようにする。
  • MySQL Temporary Objects
    • サーバ側がカウンタで前回の処理からの差分を描画
    • Created Tmp Tables:作成した一時テーブルの数
    • Created Tmp Disk Tables:ディスク上に作成した一時テーブルの数
    • Created Tmp File:作成した一時ファイルの数 「Created Tmp Disk Tables」に計上される一時テーブルは、 一時テーブルのサイズが「tmp_table_size」を越えた場合にディスクに書き出されるもの。 「Created Tmp File」に計上される一時ファイルは「sort_buffer_size」を 越える大きな「ORDER_BY」や「GROUP_BY」により作成されます。

InnoDB関連のグラフ

  • InnoDB Buffer Pool Activity
    • サーバ側がカウンタで前回の処理からの差分を描画
    • Pages Created:作成されたページの数
    • Pages Read:読み込まれたページの数
    • Pages Written:書き込まれたページの数
    • デフォルト1ページ16KB
  • InnoDB Buffer Pool
    • サーバ側の値をそのまま表示
    • Pool Size:バッファプールのサイズ(ページ数)
    • Database Pages:データがあるページ数
    • Free Pages:空きページ数
    • Modified Pages:書き換えが発生したダーティページ数
    • 単位がページ数で、デフォルトは1ページ16KB。
  • InnoDB I/O
    • サーバ側がカウンタで前回の処理からの差分を描画
    • Fire Reads:OSでの読み込みI/O実行回数
    • Fire Writes:OSでの書き込みI/O実行回数
    • Log Reads:log書き込みI/O実行回数
    • Fire Fsysncs:OSでのfsyncs実行回数
  • InnoDB I/O
    • サーバ側の値をそのまま表示
    • このグラフの数値すべてが0でない場合、ディスクI/Oがボトルネックになっている可能性がある。InnoDB I/Oグラフと併せて確認する
    • Pending Aio Log Ios:insert bufferの非同期ログでの待ちI/O数
    • Pending Aio Sync Ios:insert bufferの非同期syncでの待ちI/O数
    • Pending Chkp Writes:チェックポイントでの待ち
    • Pending Ibuf Aio Reads:insert bufferの非同期ログ読み込みでの待ちI/O数
    • Pending Log Flushes:ログフラッシュでの待ち
    • Pending Log Writes:ログ書き込みでの待ち
    • Pending Normal Aio Log Reads:通常の読み込み非同期I/Oでの待ち
    • Pending Normal Aio Log Writes:通常の書き込み非同期I/Oでの待ち
    • Pending Buf Pool Flushes:バッファプールフラッシュでの待ち
  • InnoDB Insert Buffer
    • サーバ側がカウンタで前回の処理からの差分を描画
    • Ibuf Inserts 実行した書き込み要求数
    • Ibuf Merged マージされたI/O要求数
    • Ibuf Merges マージ処理回数
  • InnoDB Lock
    • サーバ側がカウンタで前回の処理からの差分を描画とサーバ側の値をそのまま表示のものがある
    • サーバ側がカウンタで前回の処理からの差分を描画
      • Innodb Log Buffer Size:ログバッファのサイズ
      • Unflushed Log:ログから書き出されていないデータ量
    • サーバ側の値をそのまま表示のものがある
      • Log Bytes Written:ログに書き込まれたデータ量
      • Log Bytes Flushed:ログから書き出されたデータ量
  • InnoDB Row Operations
    • サーバ側がカウンタで前回の処理からの差分を描画
    • Row Read 読み込まれた行数
    • Rows Delete 削除された行数
    • Rows Updated 更新された行数
    • Rows Inserted 挿入された行数
  • InnoDB Semaphores
    • サーバ側がカウンタで前回の処理からの差分を描画
    • SQL文の「SHOW ENGINE INNNODB STATUS」で取得する「SEMAPHORES」の値
    • Spin Rounds スピンロック獲得のためのラウンド数
    • Spin Waits スピンロック獲得待ち
    • Os Waits OSロック獲得待ち数
  • InnoDB Transactions
    • サーバ側がカウンタで前回の処理からの差分を描画とサーバ側の値をそのまま表示のものがある
    • 前回からの差分を描画
  • MyISAM Indexes
    • サーバ側がカウンタで前回の処理からの差分を描画
    • Key Read Requests キャッシュからのキーブロックの読み込み要求数
    • Key Reads ディスクからのキーブロックの読み込み回数
    • Key Write Requests キャッシュにキーブロックを書き込んだ要求数
    • Key Writes ディスクへのキーブロックの書き込み回数
    • SQL文の「SHOW GLOBAL STATUS」で取得する値
    • キャッシュミス率は「Key Reads」/「Key Read Requests」で計算
    • 「Key Reads」がほぼ0になるよう調整する

Grafanaの見方

5.1.6 サーバーステータス変数