Linuxの 'top'コマンドからの出力を解釈する方法は?


27

メモリの消費量についてここで議論した後、コマンドでPHP-FPMメモリを読み取るときに問題が見つかりましたtoptop再起動直後のスクリーンショットですPHP-FPM。すべてが正常です。約20個のPHP-FPMプロセスで、それぞれ5.5MBのメモリを消費します(合計の0.3%)。

ここに画像の説明を入力してください

再起動の直前PHP-FPM(前回の再起動の1日後)に古いサーバーを示します。ここでは、PHP-FPMメモリ使用量が2倍の状態で約25 個あります(10MBは合計の0.5%を示します)。したがって、使用されるメモリの合計は600〜700 MBです。では、なぜ1.6GBのメモリが使用されたのでしょうか?

ここに画像の説明を入力してください



@ephemientいいえ、ここではそうではありません。これらすべてをチェックしました。これはPHP-FPMに接続されたものであり、PHP-FPMを再起動するだけでメモリが解放されます。とにかく、Memとbuffer / cache inの値freeは同じです。
Googlebot

6
Virtuozzo "VM"を実行しているようです。メモリアカウンティングがこれらのことを行う限り、すべての賭けはオフになります。
ウォンブル


親愛なるワンブルとエフェメエント:あなたの答えを両方盗みました!カックルズ
ウェスリー

回答:


34

TL; DR 1

サーバーは、ある種のvirtuozzo / openvz / virtualization-du-jourコンテナー内にあります。メモリ使用量の意味を理解しようとすることは、風車で傾いています。

TL; DR 2

LinuxはRAMを食べました!しかし、それは大丈夫です、それは皆にそれをします。


ロングストーリー

分解しましょう!

Mem:セクション我々は持っています:

  • $n total:マシンの物理RAMの量
  • $n used:プロセスの合計だけでなく、Linuxが消費しているメモリの量。
  • $n free:Linuxが消費していないRAMの量。これは、キャッシュされたメモリとバッファされたメモリが本質的に「無料」であることを考慮していません。
  • $n buffers:バッファスペースは、読み取り済みまたは書き込み保留中のディスクI / Oのブロックが格納される場所です。バッファは、単一のディスクブロックのRAM表現です。

Swap:セクション我々は持っています:

  • $n total:自明です。ページをスワップするために使用可能なディスク容量。
  • $n used:自明です。使用されているディスクスワップ領域の量。
  • $n free:Herp Derp。
  • $n cache:上記のバッファと密接に関連しています。それは実際にはページキャッシュの一部であり、それ自体は物理ディスク上にスペースを持ちません。この会話の詳細について心配する必要はありません。

あなたが走るとき面白い部分が来ますfree -m。3行が表示され、すべての数値がtopと相関します。例として自分のPCを挙げます。

             total       used       free     shared    buffers     cached
Mem:          8070       7747        323          0        253       5713
-/+ buffers/cache:       1780       6290
Swap:         5055          0       5055

Memの行は、ショー(メガバイト単位の合計RAM $n total(使用されているどのくらいのトップで)、 $n used(無料でどれだけ上位に)、$n free共有されているどのくらいのトップに)、(これを無視する)、そして今、良い部分が来ます!列相関させるために、予想通り、と。しかし、その2行目で始まる行を見てください。数学は、使用量が実際に(合計)-((used-buffers)-cached)であることを示しています。無料は(合計)-(theNewUsed)です。bufferscachedfree -m$n buffers$n cachefree -m-/+ buffers/cache:

これはどういう意味ですか?LinuxがRAMを食べたということです!簡単に言えば、Linuxカーネルはディスクキャッシングに使用可能なRAMを消費するということです。カスタムカーネルをコンパイルしようと思わない限り、それに対してできることは何もありません。プロのヒント:しないでください。

RAMは実際に存在し、プロセスが自由に使用できるようになっています。それがの-/+ buffers/cache:行の意味free -mです。ただし、ハイパーバイザー以外の仮想化コンテナの内部にいるため、物事が少し面倒になります。この時点では、バイト精度でメモリを確保することはできません。ただし、非常に異常な動作は見られません。

冷静に、戦い続けよ。また、物理サーバーを取得します(KreskinがSysAdminのように見えるメモリ統計が好きでない限り)。


使用量は((used-buffers)-cached)ではありませんか?
mac

1

Topはメモリ使用量を確認する最良の方法ではありません。ただし、私の質問はこの質問の複製としてマークされているためここに解決策を投稿します。

フォーラムで、ps_mem.pyがメモリ使用量を確認することを読みました。

リポジトリ:https : //github.com/pixelb/ps_mem/

ダウンロード:

pip install ps_mem

使用法:

ps_mem

出力:

# ps_mem
 Private  +   Shared  =  RAM used   Program

  4.0 KiB +  15.5 KiB =  19.5 KiB   udevd
  4.0 KiB +  16.0 KiB =  20.0 KiB   mysqld_safe
  4.0 KiB +  25.5 KiB =  29.5 KiB   dbus-daemon
  4.0 KiB +  27.5 KiB =  31.5 KiB   xinetd
 60.0 KiB +  14.5 KiB =  74.5 KiB   epmd
108.0 KiB +  23.0 KiB = 131.0 KiB   init
  8.0 KiB + 135.0 KiB = 143.0 KiB   saslauthd (2)
180.0 KiB +  34.0 KiB = 214.0 KiB   check_scripts.s
796.0 KiB +  41.0 KiB = 837.0 KiB   bash
528.0 KiB + 359.0 KiB = 887.0 KiB   crond (7)
  1.2 MiB + 218.0 KiB =   1.4 MiB   sshd (2)
  1.6 MiB +  45.0 KiB =   1.6 MiB   rsyslogd
  2.0 MiB + 133.0 KiB =   2.1 MiB   beam.smp
  1.3 MiB +   2.3 MiB =   3.6 MiB   httpd (8)
 12.8 MiB + 956.0 KiB =  13.8 MiB   sendmail.sendmail (7)
 53.5 MiB + 114.0 KiB =  53.7 MiB   mysqld
317.6 MiB +   2.3 MiB = 320.0 MiB   python (6)
---------------------------------
                        398.5 MiB
=================================
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.