$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

topにおけるCPUのsteal/niceは何か調べた

入門監視を読んだところ、CPUのstealやniceが何か分からなったため調べてみた。今回はそのメモを書いてみる。あまり自信はないので間違っていたら指摘してください。

steal

リソース制御でサービスレベルを確保せよ (2/3):実践! Xenで実現するサーバ統合(5) - @IT が参考になった。

steal列には、ゲストOSがリソース要求を行ったにもかかわらずCPUリソースを割り当ててもらえなかった時間の割合が表示されます。steal列に0%以外の値が表示されている場合はCPU利用率閾値設定が行われているか、ほかのゲストOSあるいはホストOSが同時にCPUリソースを要求して「取り合い」の状態になっていることが考えられます。特に閾値を設定していないにもかかわらずこのstealの値が高いようであれば、そのホストサーバは全体として過負荷になっているか、前述のCPUマッピング設定がアンバランスになっている可能性が高いと判断できます

パフォーマンスが出ない状態でstealが占める割合が高い場合、VM周りで何か問題が起こっていることが考えられる。例えばホストOSが何らかの理由で異常に負荷がかかってしまっているとか。

もしstealが高い場合でAWSを使っているなら、ホストの障害が起こっている可能性があると考えて、インスタンスのstop -> startを試してホストを変えてみると治るかもなーと思った。

nice

niceの調査は結構難しかった。以下の文献が参考になった。

man topで参考になるのは

us, user : time running un-niced user processes
sy, system : time running kernel processes
ni, nice : time running niced user processes
...
13. NI -- Nice Value
The nice value of the task. A negative nice value means higher priority, whereas a positive nice value means lower priority. Zero in this field simply means priority will not be adjusted in determining a task's dispatch-ability.

このあたりを総合すると

  • CPUにおけるnice値はlow priorityなプロセスが占めている率
    • man topではuserはun-nicedと書いていると書いているので、CPUのnice値とは逆と考えたら良さそう
  • CPUのnice値を読み解くときは
    • CPU利用率が高く、かつCPUのnice値が高い場合、low priorityなプロセスが多いだけなので、優先度が高いプロセスが現れたらそっちにCPU使われる。そのため問題ないことが多い
    • CPU利用率が高く、CPUのnice値が低い場合、優先度が高いプロセスが多くCPUに余裕がない状態
  • 優先度の意味でのniceの値(niceコマンドで設定できる)は-20~19の値が取れる。-20が優先が最大で、19が優先度が最低(プラスとマイナスの意味が逆転してる)。

という感じ?ただこの文章を書いてみて次のことも同時に思った。

  • niceコマンドで優先度の意味のniceの値を-20(つまり通常のプロセスより優先度が高い状態)にした場合、そのプロセスはnicedなプロセスになってCPUのnice値も上がるんじゃない?
  • そうすると、次の文章は嘘かも? -> 「CPU利用率が高く、かつCPUのnice値が高い場合、low priorityなプロセスが多いだけなので、優先度が高いプロセスが現れたらそっちにCPU使われる。そのため問題ないことが多い」

この疑問はまた別途考える。

まとめ

今回は「入門 監視」を読んで疑問に思ったstealとniceの値について調べてみた。何か間違いがあったら教えてください。あとniceはやっぱりよく分かってない部分も多いのでそちらも知りたい。

入門 監視 ―モダンなモニタリングのためのデザインパターン

入門 監視 ―モダンなモニタリングのためのデザインパターン