1819523 メンバー
3243 オンライン
109603 解決策
新規ポスト

topの見方

 
うえたけ
時折のアドバイザー

topの見方

ご存知でしたら教えてください。

topコマンドでは、まず�個別CPU情報が表示され、その後に�プロセス毎のデータが表示されると思います。

�のCPU列と�のCPU列は関連があるのでしょうか?

というのも、�で表示されるあるプロセス(CPU値が1)の%CPUが90%にも関わらず、�でCPU値が1のものをチェックすると、USER値が40%だったりするので、疑問でした。

どなたか教えて頂ければうれしいです。
5件の返信5
uhyo
貴重なコントリビューター

topの見方

基本的には同じです。

ただし、計算ロジックが異なるので(すいません。正確には覚えていないのですが全体のCPU使用率はチックごとにそのCPUがUSER、SYS、IDLEだったという状況をもとにパーセントをはじいていますが、プロセスのほうは別のロジックだったと記憶してます。)

うえたけさんのようなケースもでてきます。

個別プロセスのCPU利用率が高かったのは事実だと

思います。

いつもながら役に立たない書き込みですみません。

oops
貴重なコントリビューター

topの見方

関連はあります。

プロセスで表示されるCPU%は、user mode で使用したものだけではなく、トータルの使用率になります。�の方は user、sys、nice 等細分化されて表示されますので、user 以外の CPU 使用率はどうでしょうか?�で、100% から idle の CPU使用率をひいた値と、プロセスの CPU 使用率がほぼ一致しませんか?プロセッサ上で動作するプロセスは変化する(色々なプロセスが動作している)ので、完全一致することはありませんが、ある特定のプロセスのCPU使用率が高いのであれば、そのプロセスの使用率とほぼ一致するはずです。
うえたけ
時折のアドバイザー

topの見方

ご返信ありがとうございます。

「関連はある」ということですが、�のCPU%と�のidle以外のCPU%は結構違いがあります。

よくよく考えてみると、サーバは複数CPUなのでタイムシェアリングにより、�と�のCPU%に差が出ているのか?と想像しています。間違っているでしょうか?

だとしたら、複数CPUの場合の�と�のCPU紐付けはあまり意味がないということでしょうか??
oops
貴重なコントリビューター

topの見方

> よくよく考えてみると、サーバは複数CPUなのでタイムシェアリングにより、�と�のCPU%に差が出ているのか?と想像しています。間違っているでしょうか?

間違ってはいません。

   

> だとしたら、複数CPUの場合の�と�のCPU紐付けはあまり意味がないということでしょうか??

そんなことはないです。

確かに、個別のCPUの%情報の取り方と各プロセスのCPUの取りかたは当然違います。個別の CPU% 情報は、プロセッサのステータスをもっている構造体から取得しますし、各プロセスの CPU% 使用量は、プロセス(スレッド)の構造体から取得します。

タイムシェアリング云々というよりも、マルチプロセッサの場合、各プロセスは CPU を bind してない限り、いつも同じ CPU で動作しているとは限らず、そこのところででる違いの方が大きいのではないでしょうか。それとも、該当プロセスはいつも同じ CPU で動作しているのでしょうか?

各プロセッサ上で動作するプロセスは変わります。

話しを単純化しますと、例えば 2CPU 構成のシステムで、CPU を 90% 以上使用するようなプログラムを一つ作り、CPU 1 に bind して動作させます。そうすると、CPU 0 はスカスカで、CPU 1 はほぼ 90% 使用しているように見えるはずです。

プログラム側で CPU を bind していない場合は、OS はできるだけ負荷が均等になるように割り当てるようにします。

的外れなことを書いてたらすみません。

大原
うえたけ
時折のアドバイザー

topの見方

ご説明ありがとうございます。

「プロセッサ自体とプロセスでCPU使用率の情報を取得しているところが違う」ということが明確になり、現象がとてもよく理解できました。ありがとうございます。(初期にunyoさんがおっしゃっていた意味がやっと分かりました)。

今回チェックしていたのは、自作PGではないのでソースは覗けませんが、現象よりCPUにBINDされないPGのようです。

このようにBINDされていないPGの場合は、�のCPU値はTOPコマンドが捕らえた瞬間のCPU番号を出しているのだと考えています。

ありがとうございました。