CPU使用率の簡単な説明
4230 ワード
/proc/stat計算によるCPU使用率の紹介
linuxは/proc仮想ファイルシステムを通じて、ユーザーがシステム内部の状態情報を提供したと思います./proc/statはシステムCPUとタスク統計情報を提供します.第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:各プロセス資源の使用状況のみを表示する
トップ出力:
%Cpu(s)行にCPUの使用率情報が表示されているのが直感的にわかります.1キーを押すとすべてのCPUが表示されます.中央の空白行の下にプロセス情報が表示されます.ここで%CPUの表示は、カーネル状態とユーザー状態のCPU使用率の合計です.
しかしtopは,プロセスに対してカーネル状態とユーザ状態のそれぞれのCPU使用状況を区別して示していないため,%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以降に組み込まれた性能分析ツールです.パフォーマンスイベントサンプリングに基づいて、システムのさまざまなイベントとカーネルのパフォーマンスだけでなく、指定したアプリケーションのパフォーマンスの問題を分析するためにも使用できます. 第1列Overheadは、シンボルのパフォーマンスイベントのすべてのサンプリングにおける割合であり、パーセンテージで表される. の2番目の列Sharedは、カーネル、プロセス名、ダイナミックリンクライブラリ名、カーネルモジュール名など、関数または命令が存在する動的共有オブジェクトです. 第3列Objectは、動的共有オブジェクトのタイプです.例えば[.]ユーザ空間を表す実行可能プログラム、またはダイナミックリンクライブラリ、[k]はカーネル空間を表す. の最後の列Symbolは、シンボル名、すなわち関数名です.関数名が不明な場合は、16進数のアドレスで表されます.
perfの2つ目の一般的な使い方はperf recordとperf reportで、性能分析の時、perf topは性能情報を示したが、保存されず、オフライン分析ができず、perf recordはデータを保存し、perf reportは保存したデータを表示する
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
列ごとの数値の説明:
CPU使用率は/proc/statで算出することができ、例えば1秒間隔でCPU使用率を算出するには、1秒間隔で/proc/statを取得して次の式の計算を行う必要がある
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
CPU使用率アッププログラム解析ツール
私たちはps,top,pidstatを通じてそのプロセスに位置決めすることができてCPUの使用が比較的に多い後に、このプロセスを位置決めする中でその関数がCPUの使用率を上昇させる必要があります
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
perfの2つ目の一般的な使い方はperf recordとperf reportで、性能分析の時、perf topは性能情報を示したが、保存されず、オフライン分析ができず、perf recordはデータを保存し、perf reportは保存したデータを表示する