- - PR -
vmstatとsarについて
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-04-20 11:11
こんにちわ。
CPU使用率の取得についてなのですが、 vmstatとsarのどちらを使おうか迷っています。 まず、今作ろうとしているPGが、 起動時に、リソース取得コマンド(vmstatかsar)を起動 GUIの画面か何かで、リソース取得開始ボタン押下から、 リソース取得終了ボタン押下までの、CPU使用率およびメモリ使用量を 取得する、というものなんです。 で、開始ボタン押下から終了ボタン押下までの時間は、 ユーザー依存なのでわかりません。 となると、sarコマンドは、vmstatのようにコマンドを流しっぱなしにする ことはできませんよね?(vmstatなら”vmstat 1”とかにすれば、 1秒間隔でリソース状態を取り続けてくれる) なので、vmstatを使用しようかと思ったのですが、 vmstatとsarの出力内容を見ると、vmstatはusrとsysのみで、 sarだと、usrとsysとwioのCPU使用率が出力されます。 本来のCPU使用率というのは、usrとsysとwioを足したものだと思うのですが・・・。 usrとsysを足しただけでも、良いのでしょうか? それともvmstatでは、usr、sysのそれぞれにwioの値が含まれていたりするのでしょうか? | ||||||||
|
投稿日時: 2005-04-20 12:22
私がメインで使用している FC1 + 2.4系 kernel では、usr, nice, sys の3種類(idle除く)のようですが…。 もっとも、vmstat を実行すると、us(user), sy(system), wa(IO-wait) の3種類 + id(idle) が表示されますが。 kernel のバージョンや、ディストリビューション等でも違ってくるのではないでしょうか? 後は、man 5 proc 等もご参考に。 | ||||||||
|
投稿日時: 2005-04-20 12:36
sarはあらかじめ決めておいた時間間隔で取得しておいたデータを
分析するものですが... man 8 sadc とか man 8 sa1 あたり。 あと、I/O wait は、CPUアイドル時と思いますが。 RHEL3 ではマニュアルにもその他のドキュメントにも全く説明が 無かったので分かりませんけど。 # その程度にしかメンテナンスされてないドキュメントなら、 # 書いてあっても内容が間違ってる可能性が少なくないし おそらく、CPUアイドル時にシグナル受信不可で待機している プロセスが存在した場合に I/O wait と分類しているのではないかと 思います。ソースコードを確認したわけじゃないですが。 [ メッセージ編集済み 編集者: ぽんす 編集日時 2005-04-20 12:39 ] | ||||||||
|
投稿日時: 2005-04-20 13:16
ぽんすさん、angelさん返信ありがとうございました。
では、”CPU使用率”というのは、 usrとsysのCPU使用率を足したものと考えてよいでしょうか? (I/O waitはwait時のCPUだから関係ない・・・??) | ||||||||
|
投稿日時: 2005-04-20 22:59
正直、sar や vmstat で言うところの I/O wait が何なのかは分かりかねるところです。
私がプログラムでインプリメントを考えるのであれば、kernel の提供する情報を直接参照しようと思うでしょう。sar や vmstat の出力を加工し直す方が面倒に見えますし。 プロセス個々のデータとしては、utime, stime (後は子プロセスの分も)、システム全体としては、user, nice, system を使うのが妥当と考えます。 尤も、kernel のバージョンによって細部が変わって来る可能性があります。私の判断基準は man 5 proc の内容から来ていますので、ご注意のほどを。 | ||||||||
|
投稿日時: 2005-04-21 01:48
そうです。あと、niceという分類の表示があればそれも加えて。 I/O wait はアイドルの一種です。 # そのはず。AIX や Solaris ではそーゆーものだし。が、未確認。
vmstatもsarも「/procを読む」とゆー、なんだかアレなことをやっていた はずなので「じゃあ自分で/proc読めばいいだろ」という話にもなる わけですが、出来合いのものですむ用事ならそれを使えばいいじゃん、 という話もあるわけで。 sarの場合は、何も考えずにデータをとっておけば後でどうとでもなるので ズボラな向きにオススメです。私はよく使ってます | ||||||||
|
投稿日時: 2005-04-21 18:02
angelさん、ぽんすさん、またまたご返答ありがとうございました。m(_ _)m
そうなんです。取得したvmstatの出力の加工は結構面倒です。 汎用的でないとも思われますし・・・。 CPUが増えたらどうなるんだろう・・・などなど、問題はあります。 ただし、今回はOSがAIX、Solaris、HP-UXのどれにも対応し、 かつバージョンも限定されていないので、一概にkernelの情報取得では難しいかと・・・。 すみません、そこでもう1つ質問させてください。 AIXの場合、デフォルトでCPUを2つ持っていますよね、 で、vmstatで表示されると通常以下のようになるのですが kthr メモリー ページ フォールト cpu -------- ----------- ------------------------ ------------ ----------- r b p avm fre fi fo pi po fr sr in sy cs us sy id wa 1 1 0 274976 646652 0 0 0 0 0 0 233 6648 339 0 0 99 0 これを見る限り、CPUが複数個あっても、vmstat的にはCPU情報としては1つ(総数?) しか表示されていません。これは、デフォルトで2つあるから、 まとめて表示されているだけで、もう1つデフォルト以外にCPUを足したらCPU情報は 2つ表示されてしまうのでしょうか?(例えば以下のような感じ) kthr メモリー ページ フォールト cpu cpu -------- ----------- ------------------------ ------------ ----------- ----------- r b p avm fre fi fo pi po fr sr in sy cs us sy id wa us sy id wa 1 1 0 274976 646652 0 0 0 0 0 0 233 6648 339 0 0 99 0 0 0 99 0 それとも、vmstatで表示されるCPU使用率はCPUをいくつ持っていようとも、1つなのでしょうか? | ||||||||
|
投稿日時: 2005-04-21 18:53
OSによって、バージョンによって、実行環境によって、表示のされかたや 数字の意味が違ってきたりするので可搬性のあるやり方は無いですね。 どーやっても無理でしょう。 加工するのはawkあたりでちょこちょこっと書けばすぐ出来ます。 awkでなくても、perlでもなんでも得意な言語でてきとーに。
そうです。AIXだとCPU間の平均値が表示されます。 IBMのサイトで公開されているパフォーマンス・マネージメント・ガイドに 目を通しておくのが吉かと思うです。 SolarisだとmpstatでCPUごとの情報が出るはず。 # 私はめったにSolarisを触らないのであんまり知らないですが。 [ メッセージ編集済み 編集者: ぽんす 編集日時 2005-04-21 18:55 ] |