Linux または Unix オペレーティングシステムでは、System load
次のテキストが表示されます。
これが何を意味するのか、そしてCLIコマンドを使用してシステム負荷%を抽出する方法を教えてください。
System load: 6.84
答え1
Unixスタイルのシステムロード値に関するWikipediaの記事を参照してください。 https://en.wikipedia.org/wiki/Load_(計算)
要するに、もしこれはUnixスタイルのロード平均です。分けるこの値をシステムで使用可能なプロセッサコアの数で割ります。100を掛けるパーセント値を取得します。
実際、Unixスタイルのロード値は、特定の期間にわたって実際に実行+待機しているCPUプロセスの平均数を表します。通常、1分、5分、15分の時間枠を使用して3つの負荷値が報告されます。 Linuxでは、I / Oを待つプロセスも計算されますが、ほとんどのUnixシステムでは計算されません。
負荷値が使用可能なプロセッサコアの数より小さい場合、システムは平均ウィンドウ内で完全に使用されず、より多くのタスクを処理できることを意味します。ワークロードがプロセッサ処理能力を超えています。
ほとんどのUnixシリーズシステム(Linuxを含む)では、このuptime
コマンドを使用して次の出力を取得できます。
$ uptime
12:11:23 up 5:22, 1 user, load average: 0.04, 0.05, 0.01
この単語の後には、load average:
1、5、15分時間ウィンドウの負荷値が表示されます。
Linux/proc/loadavg
ではcat /proc/loadavg
。
Linuxでは、負荷平均を次の割合に変換できます。
#!/bin/sh
# uses the 5-minute load value
LOADVAL5=$(awk '{ print $2; }' < /proc/loadavg)
NUMCPUS=$(getconf _NPROCESSORS_ONLN)
echo "$LOADVAL5 * 100 / $NUMCPUS" | bc
もちろん、このスクリプトは最適化されていないため、繰り返し実行には適していません。監視システムを開発する場合は、負荷率を計算するために外部スクリプトを実行するのではなく、プログラムコードで計算を実行する必要があります。
答え2
kernel/sched/loadavg.c
グローバル負荷平均は、nr_running+nr_uninterruptible の指数関数的に減少する平均です。
これが完璧な答えです。特に、nr_runningとnr_uninterruptibleが何であるかは、次の質問に直接リンクされているためです。
私はいつもパーセンテージ使用を主張しており、OPの意味でパーセント使用を主張しています。しかし、「システムのロード」に対する(Linux!)技術的な答えは次のとおりです。
これ数字「R」の仕事。プラス「D」。
「R」は実行中または待機中です。つまり、実行キューにあります。 「D」は(特殊)待機状態です。 Linuxは、少なくともCPUではなく「システム」ロード(「ほとんどIO」)を表すため、これらのタスクを含みますが、ここでは重要ではありません。単に「システムのロード」を表します。直接「CPUロード」ではありません。
したがって、CPUを配置して競合するジョブ/スレッドの生の数です。
または実行中のジョブの平均割合。
平均して... 1分、5分、15分の明確に定義された期間の1つ内にあります。ここに別のブロックを挿入しましたが、実際には
#define FIXED_1 (1<<FSHIFT) /* 1.0 as fixed-point */
#define LOAD_FREQ (5*HZ+1) /* 5 sec intervals */
#define EXP_1 1884 /* 1/exp(5sec/1min) as fixed-point */
#define EXP_5 2014 /* 1/exp(5sec/5min) */
#define EXP_15 2037 /* 1/exp(5sec/15min) */
/*
* a1 = a0 * e + a * (1 - e)
*/
static inline unsigned long
calc_load(unsigned long load, unsigned long exp, unsigned long active)
{
unsigned long newload;
newload = load * exp + active * (FIXED_1 - exp);
if (active >= load)
newload += FIXED_1-1;
return newload / FIXED_1;
}
これで、通常のサイズHZ "333"(100〜1000の間)の場合は1666 + 1になります。 1分平均の場合、5秒のサンプリングレートは非常に良いです。毎分平均12サンプルです。
このコメントはa1 = a0 * e + a * (1 - e)
全体的な美しさを示しています。サンプリングされた「a」(「アクティブ」については、以下のcalc_load()を参照)をa0(load)と組み合わせてa(newload)を形成します。
FIXED_1がどのような用途に使用されているかわかりません。私は受け取ります」1.0を固定点に「というメッセージで次のように質問します。
それでは、システム負荷率はどうですか?
簡単にするために、CPUは一度に1つのスレッドしか処理できないと言います。
少し複雑です。 「クアッドコア」「マルチ/ハイパースレッディング/リッピング」CPUは、コアあたり8個以上のCPUにすることができます。これが「SMP」実装です。
さらに重要なのは、クアッドコアがまだ8つではなく4つであることです。 Intelは、ハイパースレッディングによって120%の一般的な利点を得ることができると主張しています。これは彼らが言うのとまったく同じです。 200%ではありません。
したがって、負荷平均6.8(上記のクアッドコア/ cpu0-7システムの割合として表示)は、次のことを意味します。
その期間(最後の1.5分または15分)の間、平均でほぼ7つのスレッドが実行されました。 8個のCPUを使用すると、システム負荷が87%に見えます。ただし、8つのCPUのうち4つは「ハイパー」スレッドであり、スループットを犠牲にして並列化されました。
6.8は100%よりわずかに高く、100%未満ではありません。
これらすべてのタスク - コアマッピングの問題を回避するために、負荷平均は生の「R」(および「D」)状態の数です。
上記の例では、x86の場合は「100%」への参照として4を使用しています。つまり、どんなスレッドも待つ必要はなく、コアが数ナノ秒でもアイドル状態になる点はありません。 「Well Balanced」がまさにそれです。追加の負荷により、CPUにわずかな過負荷(100%以上、4または8以上)が発生する可能性があります。
2x 4コアシステムには9つの実行スレッドがあるためです。これにより、そのうちの1つを特定の時間に実行できなくなります。したがって、理論的には、コア数とコアあたりのnr倍スレッドの間に100%の線を描くことができます。
これが私がこの質問に賛成票を投げた理由です。私は「パーセンテージ」の解釈に対してあまりにも防御的であるという理由で自分自身を打つしかありません。間違っているのではなく、マニュアルページとカーネルソースコードで明確に説明するのに時間がかかりすぎてしまったからです。
私は以下のすべてをそのまま残します。 「参照、本質的にパーセンテージでもあります」について少し偏見があるかもしれません。
推測してみてください:man uptime
数行で説明してください。私はここで10歳の子供のようにパーセンテージ計算について話しています。
負荷平均はシステムのCPU数では正規化されていないため、負荷平均1は単一のCPUシステムが常にロード状態であることを意味し、4 CPUシステムではシステムがアイドル状態であることを意味します。75%の時間。
telcoM
以下はリンクの中央部分であるWikipediaの記事「Load」です。
例えば、説明できる負荷平均は「1.73 0.60 7.98「中 一つ-CPUシステムは次のとおりです。
- 最後の瞬間に、システムは73%過負荷平均して(1.73の実行可能プロセス、つまり平均0.73のプロセスが単一のCPUシステムで待機する必要があります)
- 最後の5分間、CPUはアイドリング時間の40%一般的に。
- 過去15分間、システム過負荷698%平均(7.98個の実行可能プロセス、つまり単一のCPUシステムでは平均6.98個のプロセスが待機しています)。
もう一度説明する必要はありません。これらの3つの例はよく選択された。
私はリンクと彼の正確な要約のためにtelcoMに投票します。
ところで、「指数崩壊」はわかりやすいので、ゆっくり聞いてみるといいと思います。座るサウンドベンド(または...)は完璧な比較です。
uptime
これらの3つの値を提供して、「今」(過去数秒/分)の外観、「最近」に発生したこと(例:過去5分)、および「要約」が過去5分であることを知らせるため、価値があります。 20分。
Wikipediaの例は次のことを意味します。
現在のシステム負荷が高い。数分前、値は非常に低かった。しかし、その前にも数分間続く高い負荷期間があります。 10分間非常に高いか、5分間非常に高いです。
3x3行列から:
x_X
:wikiはい、はい:100,0,255:紫 - 青:「オーバーロード」の後に「アイドル」の後に「読み込み」
Xx_
:255,100,0:オレンジ:アイドリング後の過負荷後の負荷
_xX
:0,100,255:ターコイズ - ブルー:現在アイドル状態、ロード後、過負荷後
x__
:100,0,0:濃い赤:読み込み中、15分前アイドル状態です。
___
:ブラック:完全アイドル状態
xxx
:グレー(または白):バランス
XXX
:白(または粗い白):明るく輝く
-->色がない場合は、過去15分間に負荷の変化がないことを意味します。
(いいえ、まだbashプロンプト機能がありません)
答え3
答え4
「top」コマンドを使用できます。これにより、PID、ユーザー、使用されたCPUなどを取得できます。
$ top
top - 15:12:59 up 4:43, 4 users, load average: 0.15, 0.32, 0.30
Tasks: 252 total, 1 running, 203 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.6 us, 1.3 sy, 0.0 ni, 95.7 id, 0.4 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8084528 total, 257360 free, 5410684 used, 2416484 buff/cache
KiB Swap: 8302588 total, 8198908 free, 103680 used. 1410824 availMem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND