CPU使用率の簡単な説明

4230 ワード

/proc/stat計算によるCPU使用率の紹介
linuxは/proc仮想ファイルシステムを通じて、ユーザーがシステム内部の状態情報を提供したと思います./proc/statはシステムCPUとタスク統計情報を提供します.
# cat /proc/stat | grep ^cpu
cpu  1206478 257 1197978 341057442 40732 0 785 0 0 0
cpu0 1206478 257 1197978 341057442 40732 0 785 0 0 0
  • 第1行のcpuには番号がなく、すべてのcpuの累積情報
  • を示す.
  • 第2行cpu 0は、システム内の単一cpu情報
  • を表す.
    列ごとの数値の説明:
  • user(通常はusと略す)は、ユーザ状態CPU時間を表す.以下のnice時間は含まれませんがguest時間も含まれています.
  • nice(通常はniと略す)は、低優先度ユーザ状態のCPU時間、すなわちプロセスのnice値が1~19の間に調整されたときのCPU時間を表す.ここで、niceの取値範囲は−20〜19であり、数値が大きいほど優先度が逆に低くなることに注意する.
  • system(通常sysと略す)は、カーネル状態のCPU時間を表す.
  • idle(通常idと略す)は、アイドル時間を表す.I/O待ち時間(iowait)は含まれません.
  • iowait(通常はwaと略す)は、I/O待ちのCPU時間を表す.iowaitはディスクi/oにボトルネックがありません.cpu上のi/o操作にかかる時間比を表します.現在、他のプロセスが実行されていない場合、i/oが小さいと、iowaitが
  • 上昇します.
  • irq(通常hiと略す)は、ハードブレークを処理するCPU時間を表す.
  • softirq(通常siと略す)は、ソフト割り込みを処理するCPU時間を表す.
  • steal(通常stと略す)は、システムが仮想マシンで動作しているときに他の仮想マシンによって消費されるCPU時間を表す.
  • guest(通常guestと略す)は、仮想化によって他のオペレーティングシステムを実行する時間、すなわち仮想マシンを実行するCPU時間を表す.
  • guest_nice(通常gniceと略す)は、仮想マシンを低優先度で実行する時間
  • を表す.
    CPU使用率は/proc/statで算出することができ、例えば1秒間隔でCPU使用率を算出するには、1秒間隔で/proc/statを取得して次の式の計算を行う必要がある
  • CPU使用率=(1-(new_アイドル時間-old_アイドル時間)/(new_総CPU時間-old_総CPU時間)*100
  • 総CPU時間:user+nice+system+idle+iowait+softirq+steal+guest+guest_nice
  • アイドル時間:idle
  • ツールによるCPU使用率の取得
    top:システム全体のCPUとメモリの使用状況を表示し、各プロセス状況を動的に表示できるps:各プロセス資源の使用状況のみを表示する
    トップ出力:
    top - 11:42:35 up 40 days, 12:35,  4 users,  load average: 0.00, 0.01, 0.05
    Tasks:  71 total,   1 running,  70 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem :  1883420 total,   531820 free,   120892 used,  1230708 buff/cache
    KiB Swap:        0 total,        0 free,        0 used.  1577520 avail Mem
    
      PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
    31680 root      10 -10  130384  12896   5308 S  1.0  0.7 363:53.95 AliYunDun
        1 root      20   0  190908   3480   2120 S  0.0  0.2   0:17.85 systemd
        2 root      20   0       0      0      0 S  0.0  0.0   0:00.01 kthreadd
    

    %Cpu(s)行にCPUの使用率情報が表示されているのが直感的にわかります.1キーを押すとすべてのCPUが表示されます.中央の空白行の下にプロセス情報が表示されます.ここで%CPUの表示は、カーネル状態とユーザー状態のCPU使用率の合計です.
    しかしtopは,プロセスに対してカーネル状態とユーザ状態のそれぞれのCPU使用状況を区別して示していないため,pidstatコマンドを用いて表示できる.
     pidstat 1 5
    Linux 3.10.0-693.2.2.el7.x86_64 (iz2zeab8t820b32tt9i96gz)   2019 12 15      _x86_64_    (1 CPU)
    
    11 48 52    UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
    11 48 53      0     20554    0.00    1.00    0.00    1.00    1.00     0  kworker/0:0
    11 48 53      0     31680    1.00    1.00    0.00    0.00    2.00     0  AliYunDun
    
  • %usr:ユーザー状態使用率
  • %system:カーネル状態使用率
  • %guest:仮想マシンCPU使用率
  • を実行
  • %wait:CPU使用待ち
  • %CPU:総CPU使用率
  • 共通パラメータ:-t:プロセスのすべてのスレッド情報を表示-w:タスクコンテキスト切替レポートを表示-u:CPU使用率を表示-d:プロセス占有ディスクを表示i/o
    CPU使用率アッププログラム解析ツール
    私たちはps,top,pidstatを通じてそのプロセスに位置決めすることができてCPUの使用が比較的に多い後に、このプロセスを位置決めする中でその関数がCPUの使用率を上昇させる必要があります
  • GDB:(The GNU Project Debugger)、この機能の強力なプログラムデバッガ.確かに、GDBはデバッガエラーの面で強いです.しかし、私はまた「挑発」に来ます.GDBは、パフォーマンス分析の初期アプリケーション
  • に適していないことを覚えておいてください.
  • perf:Linux 2.6.31以降に組み込まれた性能分析ツールです.パフォーマンスイベントサンプリングに基づいて、システムのさまざまなイベントとカーネルのパフォーマンスだけでなく、指定したアプリケーションのパフォーマンスの問題を分析するためにも使用できます.
    Samples: 1K of event 'cpu-clock', 4000 Hz, Event count (approx.): 218249930 lost: 0/0 drop: 0/0
    Overhead  Shared Object              Symbol
       5.53%  [kernel]                   [k] kallsyms_expand_symbol.constprop.1
       4.92%  [kernel]                   [k] finish_task_switch
       4.22%  perf                       [.] rb_next
    
  • 第1列Overheadは、シンボルのパフォーマンスイベントのすべてのサンプリングにおける割合であり、パーセンテージで表される.
  • の2番目の列Sharedは、カーネル、プロセス名、ダイナミックリンクライブラリ名、カーネルモジュール名など、関数または命令が存在する動的共有オブジェクトです.
  • 第3列Objectは、動的共有オブジェクトのタイプです.例えば[.]ユーザ空間を表す実行可能プログラム、またはダイナミックリンクライブラリ、[k]はカーネル空間を表す.
  • の最後の列Symbolは、シンボル名、すなわち関数名です.関数名が不明な場合は、16進数のアドレスで表されます.

  • perfの2つ目の一般的な使い方はperf recordとperf reportで、性能分析の時、perf topは性能情報を示したが、保存されず、オフライン分析ができず、perf recordはデータを保存し、perf reportは保存したデータを表示する