mishimaの日記: cgroupのIO帯域制限と性能監視 2
日記 by
mishima
弊社のサーバ運用ポリシーに変更があり、全Linuxサーバでウィルススキャンソフトによる全ファイルのフルスキャンが基本となった。
そのこと自体は問題ないのだけど(rootkit検出じゃなくてウィルススキャン、というところにやる意味あんのかという気がしないのではないけど、自分の管理している部分はともかくとして他のサーバ管理者の水準が怪しい気もするのでやらないよりはやったほうがいいと思う)、ふつうにスキャンを実施すると30分程度は負荷の高い状況になる。
ウィルススキャンというのは基本的に大量のIOを発行する処理で、放っておくとディスクのIO帯域を使い切ってしまう。その間に本来のサーバの業務が発生し、それに関連するディスクIOが発行された場合、業務側にそれなりの遅延が発生する。
これを避けるため、cgroup によるIO帯域の制限を入れてみた。この方法だとウィルススキャン中でも業務側の遅延があまり悪化せず、いい方法だと思ったのだけれど…欠点が一つあって、見かけ上CPU負荷が100%になってしまう。
cgroup による IO 帯域制限に引っかかったプロセスはIO待ち状態になるのだけど、CPU統計情報では「IO待ち状態のプロセスが存在している=IO待ち時間」としてカウントされてしまう。そのため、実際にはディスクIOの帯域に余裕があるにもかかわらずCPU使用率100%、うちIO待ち時間が95%…みたいな状態になる。気が付いてみると当たり前といえば当たり前なんだけど、これがよくあるCPU性能監視と相性が悪く、一般的な監視ツールの設定だけでは本当の高負荷との区別が難しい。
何かいい方法がないものだろうか。
CPU負荷≠IO待ち (スコア:0)
CPU使用率の見方を間違っていますよ
IO待ちは,IOの負荷であって,CPU負荷ではありません
CPU負荷を調べたいなら,CPU待ちのプロセス数をカウントしてください
Re:CPU負荷≠IO待ち (スコア:1)
残念ながら一般的な監視ツール(例えばNagios)ではそういう監視方法はデフォルトでは用意されていないんですよ。idle状態の割合で監視する方法が一般的です。
# mishimaは本田透先生を熱烈に応援しています