web-dev-qa-db-ja.com

「top」がメモリ使用量が少ないことを示し、「free」がメモリ使用量が多いことを示すのはなぜですか?

「top」がメモリ使用量が少ないことを示し、「free」がメモリ使用量が多いことを示すのはなぜですか?

Mem:    262144k total,   225708k used,    36436k free,    47948k buffers
Swap:   262136k total,       40k used,   262096k free,   110704k cached

 PID  USER      PR   NI VIRT  RES  SHR  S %CPU %MEM  TIME+   COMMAND                         
 1652 root      15   0  79456 14m  1728 S 0.0  5.6   0:00.02 miniserv.pl                  
 3544 root      15   0  87920 3356 2584 R 0.0  1.3   0:00.01 sshd  
 3707 root      16   0  86704 3104 2416 S 0.0  1.2   0:00.00 sshd    
 3708 sshd      15   0  61864 1452 872  S 0.0  0.6   0:00.00 sshd          
 3548 root      16   0  10872 1432 1116 S 0.0  0.5   0:00.00 bash                      
 1908 root      15   0  10876 1392 1072 S 0.0  0.5   0:00.00 sh      
  918 root      15   0  60520 1204 664  S 0.0  0.5   0:00.07 sshd                        
 3624 root      15   0  12584 1180 920  R 0.0  0.5   0:00.00 top                       
  926 root      18   0  19672 1152 576  S 0.0  0.4   0:00.00 crond         
    1 root      15   0  10324 704  588  S 0.0  0.3   0:00.02 init               
  311 root      16  -4  12580 704  388  S 0.0  0.3   0:00.06 udevd                       
  874 root      16   0  5884  592  472  S 0.0  0.2   0:00.06 syslogd                   
  877 root      18   0  3780  420  336  S 0.0  0.2   0:00.00 klogd

MEMの合計使用量= 12.1%

ただし、262mbのうち226mbが使用され、36mbは使用されていません。つまり、86.25%が使用されています。

スワップを考慮しても、合計メモリは262mb * 2 = 524mbです。 226mbが使用されるとすると、43.12%が使用されます。どちらも、上にリストされている実際の処理よりもはるかに高くなっています。

サーバーはCentOS5.2を実行している新しい256MBVPSであり、まだ何もインストールされていません。 webadminの実行;つまり、Pleskはありません。

この質問は基本的に、トップによって提供されているように見える矛盾する情報に関するものです。しかし、特にメモリを大量に消費するアプリケーションを実行していないサーバーの場合、このメモリ使用量は正常かどうかも疑問に思います。 Apache/Ruby EE/Passengerをインストールするつもりです。ただし、メモリ使用量がすでにこれほど高い場合は、それをどれだけうまく処理できるかわかりません。

4
Sai

上、つまり%MEM列の数値は、RSSメモリ(常駐セグメントサイズ、基本的には実際のデータが格納されているメモリ内の物理ページ)の量を物理合計のパーセンテージとしてカウントしています。マシンまたはVPSのメモリ。

一方、freeは、データがなく、バッファ、キャッシュ、またはカーネルに割り当てられていない物理メモリページの量をカウントしています。 Unixライクなオペレーティングシステムでは、OSはディスクキャッシュに空きページを使用して、その数をできるだけ少なくしようとします。空きメモリの値が高くなる可能性があるのは、マシンの起動直後、または大量の物理メモリ自体を消費していたプログラムを終了した場合のみです。

このメモリ使用量は正常ですか?簡単な答えはイエスです。 Unixプログラムでは、使用するよりもかなり多くのメモリを割り当てる(つまり、OSに要求する)のが一般的です。 VSS列を見ると、リストされているプロセスの合計は463MBを超えています。それは

  • 各プロセスに対して考慮されるメモリの多くは、同じライブラリに物理的にマップされます。たとえば、glibc
  • OSは通常、メモリをアプリケーションにオーバーコミットします。これは、ほとんどのアプリケーションが要求した内容を収集することは決してないためです。

プロセスのメモリ使用量を把握することは、科学の私見よりも芸術です。 http://lwn.net の説明を参照してください。私のアドバイスは、iostat -xmを注意深く監視し、マシンが大幅にスワップされていないことを確認することです。

6
Dave Cheney

デイブチェイニーの答えに加えて:

合計メモリ使用量からバッファとキャッシュを差し引いたもの(159M)は約67M、67/524Mは約12%です。プロセスの実行により多くのメモリが必要になると、システムは自動的に古いキャッシュをクリアして割り当てます。

無料で実行すると、プロセスを実行することで実際に使用されているメモリの量と、実際に使用可能なメモリの量がわかります。

$ free -m
             total       used       free     shared    buffers     cached
Mem:           247        218         29          0         46         96
-/+ buffers/cache:         74        172
Swap:          556          0        556

興味のある行は-/ + buffers/cacheです

2
Frenchie

おそらく、それがマシンで実行されているすべてのプロセスではなく、メモリ使用量でソートされた上位13個だけであることがわかります。

「ps」を実行すると、実行中のすべてのプロセスが表示されます。これは、Ubuntuのストックインストールでは109です。

0
Andy Shellam