Linuxサーバーのメモリ使用量と平均負荷を理解する方法


57

128GBのメモリと24のコアを備えたLinuxサーバーを使用しています。topを使用して、使用量を確認します。その出力は、投稿の最後に貼り付けられます。次の2つの質問があります。

(1)実行中の各プロセスは非常に少ない割合のメモリ(%MEMが0.2%以下、最も0.0%だけ)を占有していることがわかりますが、出力の4行目と同様に、総メモリがほぼどのように使用されるか( 「合計:130766620k、130161072k使用、605548k無料、919300kバッファ」)?すべてのプロセスで使用されるメモリの割合の合計がほぼ100%に達することはないようです。

(2)最初の行の負荷平均を理解する方法(「負荷平均:14.04、14.02、14.00」)

よろしくお願いします!

編集:

ありがとう!

また、私はかつて現在の負荷を理解せずにサーバーをクロールしたサーバーになったため、サーバーの負荷が高いかどうかを判断するために使用されるメモリの割合に基づいた大まかな数値を聞くのが大好きです。

スワップはメモリとほぼ同じと見なされますか?たとえば、メモリとスワップのサイズがほぼ同じで、メモリがほとんどなくなってもスワップがまだ十分に空いている場合、メモリとスワップの使用率がまだ高くないように見えて、他の新しいプロセス?

CPUまたはメモリ(またはメモリ+スワップ)の使用率をどのように考慮しますか それらのいずれかが高すぎるか、または両方に達すると心配になりますか?

topの出力:

$トップ

 
top-12:45:33 up 19 days、23:11、18 users、負荷平均:14.04、14.02、14.00
タスク:合計484、実行中12、スリープ中472、停止0、ゾンビ0
CPU:36.7%us、19.7%sy、0.0%ni、43.6%id、0.0%wa、0.0%hi、0.0%si、0.0%st
メモリ:合計130766620k、使用済み130161072k、空き605548k、919300kバッファ
スワップ:合計63111312k、使用された500556k、無料の62610756k、キャッシュされた124437752k

  PIDユーザーPR NI VIRT RES SHR S%CPU%MEM TIME +コマンド
 6529サンチェス18-2 1075m 219m 13m S 100 0.2 13760:23 MATLAB
13210ティモシー18-2 48336 37m 1216 R 100 0.0 3:56.75不条理
13888ティモシー18-2 48336 37m 1204 R 100 0.0 2:04.89不条理
14542ティモシー18-2 48336 37m 1196 R 100 0.0 1:08.34不条理
14544ティモシー18-2 2888 2076 400 R 100 0.0 1:06.14 gatherData
 6183サンチェス18-2 1133m 195m 13m S 100 0.2 13676:04 MATLAB
 6795サンチェス18-2 1079m 210m 13m S 100 0.2 13734:26 MATLAB
10178ティモシー18-2 48336 37m 1204 R 100 0.0 11:33.93不条理 
12438ティモシー18-2 48336 37m 1216 R 100 0.0 5:38.17不条理
13661ティモシー18-2 48336 37m 1216 R 100 0.0 2:44.13不条理
14098ティモシー18-2 48336 37m 1204 R 100 0.0 1:58.31不条理
14335ティモシー18-2 48336 37m 1196 R 100 0.0 1:08.93不条理
14765ティモシー18-2 48336 37m 1196 R 99 0.0 0:32.57不条理
13445ティモシー18-2 48336 37m 1216 R 99 0.0 3:01.37不条理
28990ルート20 0 0 0 0 S 2 0.0 65:50.21 pdflush
12141 tim 18-2 19380 1660 1024 R 1 0.0 0:04.04 top
 1240ルート15-5 0 0 0 S 0 0.0 16:07.11 kjournald
 9019ルート20 0 296m 4460 2616 S 0 0.0 82:19.51 kdm_greet
    1ルート20 0 4028728592 S 0 0.0 0:03.11 init
    2ルート15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd
    3ルートRT -5 0 0 0 S 0 0.0 0:01.01 migration / 0
    4ルート15 -5 0 0 0 S 0 0.0 0:08.13 ksoftirqd / 0
    5ルートRT -5 0 0 0 S 0 0.0 0:00.00 watchdog / 0
    6ルートRT -5 0 0 0 S 0 0.0 17:27.31 migration / 1
    7ルート15 -5 0 0 0 S 0 0.0 0:01.21 ksoftirqd / 1
    8ルートRT -5 0 0 0 S 0 0.0 0:00.00 watchdog / 1
    9ルートRT -5 0 0 0 S 0 0.0 10:02.56移行/ 2
   10ルート15 -5 0 0 0 S 0 0.0 0:00.34 ksoftirqd / 2
   11ルートRT -5 0 0 0 S 0 0.0 0:00.00 watchdog / 2
   12ルートRT -5 0 0 0 S 0 0.0 4:29.53移行/ 3
   13ルート15 -5 0 0 0 S 0 0.0 0:00.34 ksoftirqd / 3

2
メモリについての良い答えはこちらをご覧ください。 serverfault.com/questions/38065/#38074
Zoredache

そして、負荷平均に関する簡単な要約のこの回答(または詳細についてはこの長い読み)。
ニッコリー

回答:


56

(1)実行中の各プロセスは非常に少ない割合のメモリ(%MEMが0.2%以下、最も0.0%だけ)を占有していることがわかりますが、出力の4行目と同様に、総メモリがほぼどのように使用されるか( 「合計:130766620k、130161072k使用、605548k無料、919300kバッファ」)?すべてのプロセスで使用されるメモリの割合の合計がほぼ100%に達することはないようです。

現在使用しているメモリ量を確認するには、を実行しfree -mます。次のような出力を提供します。

             キャッシュされた使用済み共有バッファの合計
メンバー:2012 1923 88 0 91515
-/ +バッファ/キャッシュ:1316 695
スワップ:3153 256 2896

一番上の行の「used」(1923)の値は、ほぼ常に一番上の行のmem値(2012)とほぼ一致します。Linuxはスペアブロックを使用してディスクブロックをキャッシュすることを好みます(515)。

見るために使用される数値は、バッファ/キャッシュ行の使用値(1316)です。これは、アプリケーションが現在使用しているスペースの量です。最高のパフォーマンスを得るには、この数を合計(2012)メモリより少なくする必要があります。メモリ不足エラーを防ぐには、合計メモリ(2012)およびスワップ領域(3153)よりも小さくする必要があります。

空きメモリ量をすばやく確認したい場合は、buffers / cache row free値(695)を参照してください。これは合計メモリ(2012)-実際に使用されたメモリ(1316)です。(2012-1316 = 696、695ではなく、これは単なる丸めの問題になります)

(2)最初の行の負荷平均を理解する方法(「負荷平均:14.04、14.02、14.00」)

負荷平均に関するこの記事では、トラフィックのいい例えを使用しており、これまでに見つけた中で最高の記事です。LinuxCPU 負荷について-いつ心配する必要がありますか?。あなたの場合、人々が指摘したように:

マルチプロセッサシステムでは、負荷は利用可能なプロセッサコアの数に比例します。「100%使用率」マークは、シングルコアシステムでは1.00、デュアルコアでは2.00、クアッドコアでは4.00などです。

したがって、14.00の平均負荷と24コアで、サーバーは過負荷になりません。


17

Linuxを含むシステムのようなUnixは、利用可能なRAMを可能な限り効率的に使用するように設計されています。非常に一般的な用語では、RAMの各MBは次の3つの状態になります。

  1. 自由
  2. プロセスで使用される
  3. バッファに使用

3番目の状態は、スクラッチスペースとしてのみ使用され、必要に応じて再割り当てすることを目的としています。つまり、プログラムで使用可能なメモリの合計は、実際にはFree + UsedforBuffersです。そのため、特定のプロセスに割り当てられているように、バッファに割り当てられたスペースが実際に表示されることはありません。

負荷平均の質問は、簡単に誤解される可能性があるため、もう少し興味深いものです。詳細については、このlinuxjournalの記事を参照してください。最良の要約は、記事からの直接の引用です。

負荷平均計算は、Linuxの実行キュー内で実行中または中断不能とマークされたプロセスの移動平均として最もよく考えられます。

つまり、負荷平均は(実行中のプロセスの数)+(IOで待機しているプロセスの数)と考えることができます。いつでも$ CORE数のプロセスを実行できることを念頭に置いて、14の平均負荷はかなり低いと思います。


ありがとう!メモリ(またはメモリ+スワップ)の使用率は、負荷が高く、新しいプロセスを実行しない方がよいと見なされますか?メモリまたはメモリ+スワップの両方を見ていますか?上部に表示される使用済みスワップは、実際に使用されているスワップサイズですか?CPU負荷平均については、「負荷平均/コア数」で実際の負荷を測定していますか?サーバーの負荷が高いと思いますか?よろしくお願いします!
ティム

2
ロードは単なるインジケータです。原則として、コアよりも大きな負荷は悪いことです。一般的に、使用されるメモリの割合が高いことは悪いことです。「これだけでいい」と言うことのできるバイナリ値ではありません。RAMを使い果たすと、より多くのプロセスを実行するのに十分ではありません。あなたが不足していなければ、あなたはたくさん持っています。それはあなたの状況の詳細に非常に依存しています。
シアン

4

sarmanページから:

       負荷平均は、ランナブルの平均数または 
       実行中のタスク(R状態)、および割り込み不可のタスクの数
       指定した間隔でスリープ(D状態)します。

uptimemanページから:

       システム負荷平均は、次のいずれかのプロセスの平均数です。
       実行可能または割り込み不可能な状態。実行可能な状態のプロセス
       CPUを使用しているか、CPUの使用を待機しています。統一されていないプロセス
       破壊可能な状態は、ディスクの待機など、何らかのI / Oアクセスを待機しています。
       平均は3つの時間間隔で取得されます。負荷平均
       システム内のCPU数に対して正規化されていないため、負荷平均
       年齢が1の場合、4の場合は常に1つのCPUシステムがロードされます
       CPUシステムは、75%の時間アイドル状態だったことを意味します。

3
  1. Linuxは、しばらく前から、その行をtop基本的に役に立たないようにメモリを管理しており、一般に、マシンのメモリのほとんどを、ユーザープロセスが必要としないときにさまざまな用途に割り当てられたままにします。
  2. 負荷平均は、実行中または実行待機中のプロセスの平均数です。通常、システムの遅延/応答性と強い負の相関関係があるため、できるだけ低くする必要があります。ただし、各CPUはいつでも何かを実行できますので、14時にかなりうまくやっているようです。

ありがとう!1に関しては、いくつかのプロセスが一番上に表示されないが、多くのメモリを使用しているという意味ですか または、メモリに関する出力の4行目(「合計:130766620k使用、130161072k使用、605548k空き、919300kバッファ」)が誤解を招く可能性があるため、上部と私の場合に表示されるすべてのプロセスで使用されるメモリの割合の合計を確認する必要があります新しいメモリ消費プロセスを安全に実行できますか?
ティム

2
他の回答が指摘しているように、負荷平均はプロセッサの数と比較する必要があるため、24コアシステムでは14はそれほど多くありません。これは、シングルコアシステムでは14/24 = 0.58のようなものになります(そうです)。
デビッドZ

@ティム:私は後者を意味します。
カオス

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.