だるろぐ

だるいぶろぐです

パフォーマンスグラフの見方とか

(追記:このエントリは自力ではありません)


CloudForecast というリソース管理ツールがあります。

色々見られるのはいいんですが、[よく分からん|知らん|勘違いしている]項目ばかりなので解説のようなものを。

  • Traffic

Throughput

転送量。

Inbound

外部から受けたリクエスト。webサーバやproxyサーバの場合、主に、というか基本的にユーザからのリクエスト。

Outbound

外部へ返すレスポンス。
なお、In/Out両方とも、単純に サーバ <*> ユーザ の間でやりとりしているデータ量より多い量がグラフで見える。
例えばInboundの場合、リクエスト受けて、バックエンドにproxyして結果を受け取ってユーザに返す、とかするから。

  • Basic

system

psとかstatとかで見られるアレ。

Load Average

コア数を考慮して見る。値が1でも、コア数が1より大きいなら、ただちに焦る必要は無い。
また、値がコア数に達していても、処理が出来ているならただちに影響は無い。
あくまで負荷の目安。

Memory Usage

基本的には このへん 見ればいいと思う。
また、swapがあったとしても、swapに追い出された部分のデータがあんまり使用されないデータだったら、特に問題はないので、ケースバイケースで。
swapは、メモリに乗り切らなかったデータをディスクに置いてるだけなので、参照・要求などが全然されないデータがswapしても別にいいのです。

cached

一度メモリにデータが載った分。次にそのデータを使用する際、ファイルから読んだりするんじゃなく、メモリから返す。

avail

空きメモリ。cachedになった分が開放されたら、availが増える。

number of TCP Established

Established(接続が確立されて、データ送受信可能な状態)な状態のTCPコネクション数。netstat *n とかで確認。
ESTABLISHED の意味は上記のとおりだが、実際にはデータをやり取りしてる、と考えていい。らしいよ。


例えばappサーバで、memcachedに繋いでいるようなアプリだった場合、ずっとmemcachedと繋ぎっぱなしだったりすると、それも当然tcpコネクションなので、ここのグラフが常に大きく、かつ大体同じ値を指す事になることもある。

  • HTTP

Apache Status

Busy

処理中。だから、上のEstablisheとほぼ同じ数・グラフになる。

Idle

処理待ち。空き。

number of request

リクエスト数。

cache hit ratio

キャッシュのヒット率。

response time

リクエスト受けてからレスポンス返すまでの時間

MySQL Queries Rate

mysqlが発行してるクエリの割合。大体selectばっかりになるんじゃないでしょうか。

MySQL Queries Count

こちらはクエリの個数。

MySQL Slow Queries

言わずもがなのスロークエリ。
ログを取らなかったり、テストを書かなかったりすると、椅子やiMacが飛ぶと言われている昨今、スロークエリが出るようなコードを書いてしまった日には何が飛ぶか想像も出来ないので、間違ってもそんなコードを書かないように。

MySQL Threads

スレッドの数。
mysqlでは、スレッドを作るのに多少オーバーヘッドがあるので、一度作ったスレッドを使いまわしている。
で、例えば、ORMからDBへ接続するときにper requestでconnectionを切っているなら、あまり増えないはず。

cached

作ったスレッドを持っている状態。繋がってすらいない。スレッドがあるだけ。

connected

実際にcrudしている状態。

ROW OPERATIONS Count

countといいつつ、crudのクエリの割合。数ではない。紛らわしいので注意。
多分、readが多い状態がよくあると思う。それは、innodbでは、データをupdate/deleteするにも、まずselect投げて、どのデータをupdate/deleteするのか探している。で、その仕様上、readが多くなる。

ROW OPERATIONS Speed

読み出してるデータ量。
こちらもspeedといいつつ、読みだしている行数。
indexが不適切だったりすると、増える。

Cache Hit Ratio

キャッシュのヒット率。
innodb_buffer_pool_size で作ったメモリからちゃんと読めているか、が確認できる。
DBの実ファイルよりもinnodb_buffer_pool_sizeの方が大きいと、そもそもデータが全てメモリに載っているので、ほぼ100パーセントになる。

実ファイルは、例えば

# du -sh /var/lib/mysql/

とかで見る。(これだと全テーブルのサイズになっちゃうけど)

そうでなくとも、参照されているデータが常にキャッシュにあるような場合も、100パーセントに近くなる。

この辺の値は、show innodb statusで確認している。
まー、ディスクはメモリの100倍以上遅いので、普通はメモリを有効活用する。