kasei_sanのブログ

かせいさんのIT系のおぼえがきです。胡乱の方はnoteとtwitterへ

Webエンジニアが知っておきたいインフラの基本 #6 ステータスモニタリング

Cactiモニタリングする場合

Percona Monitoring Plugins

Cactiの標準機能じゃ監視できない項目をモニタリングする為のプラグイン

モニタリングデータの読み方

CPU Usage

  • CPU User : ユーザ領域(カーネル領域以外)のCPU
    • webサーバならプログラムで使用している分はこちら
  • CPU System : カーネル領域のCPU使用率
    • バッチ処理などで、大量のメモリアクセスなどによりこちらが増えることもありえる
  • CPU Iowait : CPUがディスクI/O待ちのためにアイドル状態で消費した時間の割合
    • ボトルネックの可能性が高いので、CPUのコア数に関わらず、30%以下にしておきたい
iowaitは、 CPUがアイドル状態で、システムに未処理のディスク入出力要求があった時間の割合を意味しますが、iowaitの状態であれば、CPUを必要とするプロセスが他にある場合には、そのプロセスがCPUを使用することが可能です。

つまり、iowaitが98%であってもCPUの負荷が高い状態ではありません。

iowaitが高い時ってどうしたら良いの?

swapの可能性が高い。メモリが足りてない or メモリリークしている

server - アプリエンジニア向け:「サーバがなんか重い」時にすること - Qiita

Load Average

  • cactiの場合、1分、5分、15分の平均が積み上げで表示されるので読む時に注意する
  • マルチコア対応がまだ不完全なので、信用度は高くない
  • 負荷の指標は応答時間とかを使ったほうが良い
  • 値の変化で状況の変化を知るのに使うのがよい
  • 性能の限界を超える負荷がかかると、LAの値が跳ね上がる
  • 処理が遅くなっていることがLAの上昇として現れる
    • 因果関係を逆に捉えない

Memory

  • used : OSやプログラムで使用中
  • cached : キャッシュとして使用中
  • buffer : バッファとして使用中
  • shared : 共有メモリとして使用中
  • free : 未使用

詳しくは前書いたこちらを参照 → linuxで空きメモリがどんくらいあるか確認する方法 - かせいさんとこ

Linuxは空きメモリがあると、勝手にキャッシュとして使うので、freeがゼロでも慌てない

リアルタイムモニタリング

dstat

サーバ全体のリソースをリアルタイムに確認するツール

どんなオプションがあるかはこちらを参照 → dstatの便利なオプションまとめ - Qiita

top

CPUの状況をリアルタイムに確認するツール

  • 起動したら[1]キーを押して、CPUのコア毎の状況を確認する
    • 展開前は各コアの平均を出すので、CPU毎に利用率が大幅に異なる場合に正しく見れない
  • ステータス(S) が、R(実行中)、D(読み書き中)のプロセスはCPUを積極的に使っている
  • CPU% は、1コア100%なので、4コアなら合計で400%が最大
    • マルチスレッドなプロセスの場合、1人で100%以上を使うこともある

iostat

デバイス毎のIO状況を確認するツール

  • r/s: 秒間の読み込み回数
  • w/s: 秒間の書き込み回数
  • avgrq-sz: 平均 I/O サイズ
  • avgqu-sz: 平均待ち行列
  • await: レスポンスタイム。I/O を実施していない待ち時間を含む。
  • svctm: サービスタイム。1回のI/Oに要する時間 (ミリ秒)。
  • %util: 使用率(ビジー率)

%util が高い場合、ディスクI/O要求に対して、ディスクI/O処理がおっついていない可能性が高い

参考

トラブル対応で使うモニタリングツール

tcpdump

  • 通信内容をdumpする
  • 通信が到達しているか確認する時便利

参考 → Network - 超絶初心者むけtcpdumpの使い方 - Qiita

strace

稼働中プロセスのシステムコールの確認

→ プロセスが想定外の挙動をしていないか確認できる

lsof

稼働中プロセスが開いているファイルの確認

  • linuxでは、デバイスもファイルとして扱われるので、アクセスしているデバイスも分かる

→ プロセスが想定外のファイルにアクセスしていないか確認できる