• ベストアンサー

サーバーのメモリーの状態

redhat linux 6.2 のサーバーで、特にアクセスはない状態として、 メモリーの状態を調べると、(free -m) total used free shared buffers cached Mem: 250 247 3 24 194 35 -/+ buffers/cache: 17 233 Swap: 517 0 517 と表示されます。 メモリーの使われている量が多すぎるような気がするのですが、これは、正常な値でしょうか。 (とくに、バッファーという所が、192Mも使われています。これは、正常な値でしょうか。そもそも、バッファーというのは、何を表しているのでしょうか。)

質問者が選んだベストアンサー

  • ベストアンサー
  • 1Yen
  • ベストアンサー率28% (11/39)
回答No.6

1,「バッファー」とは大雑把に言って、何ですか。 masa-ka> バッファキャッシュはディスクからデータを読むときに先読みをして あるいは、一度読んだらメモリが空いてる限り覚えておきます。 たとえば、Ktermを 2つ続けて起動するのに、2回 ディスクから読むのは無駄ですから 2回目はさっき読んだ物を使います。=>ハードディスクをアクセスしなくて済むので早くなる。 2, FreeBSDだと、90Mぐらい使って とありますが、どこを見て90M使っていると分かるのですか。 (freeコマンドの)used - buffers = 90M ということですか。 FreeBSDだと、topコマンドが FreeBSDに取り込まれているので 普通のtopより多くの情報が表示されます。 ですから私は、topコマンドで見ています。 Mem: 9220K Active, 1032K Inact, 3284K Wired, 1MB Cache, 2M と出たら、 9220Kアクティブ=使ってるんだなと。で、Cacheは、2M使ってる。 (職場のなので、FreeBSDのman pageがらの引用です) Solarisだと、(ソースをとってきてコンパイルしたので、普通のUNIX系マシンではこの表示が多いのではないかと思います。 Memory: 128M real, 2984K free, 111M swap in use, 466M swap free と、表示されて 128Mあり、2984K空き、111Mswapを使ってて、466Mのswapが空いていると。 http://www.linux.or.jp/JM/html/procps/man1/top.1.html を見たところ、やはり無さそうですね。 ちょっと思いつかないです。 3,あと、結局のところ、「メモリーが足りなくなってきた」と判断するには、何を見て判断すれば良いのですか。 swapが多いだけでなく、swap in/swap out が無ければ、メモリは足りていると考えて良いでしょう。 (swap したら、その時点で負けと言う人もいますが、OSの構造としてswapするように作られてますのである程度はswapします) swap in/swap outは、vmstat と言うコマンドが使えるのでは無いかと思います。 # SCO UNIX,SunOS,Solaris,HP-UX,Digital UNIX(Compaqに吸収され名前が変わりましたね),SONY-NEWS 辺りでは使えるようです。 vmstat 5 とか、やってみて page out(swap out)、page in(swap in)、page fault 等の値を見ることができると思います。 これらの値が多いと、一度にメモリ上に必要なプログラム等がロード出来ていない == メモリが足りない と言えるでしょう。 どの程度で足りないかは、その人の感覚次第(^^;;; # それ以外にも、多くの情報が出力されるので シロートの私には難解(^^;;;

その他の回答 (6)

  • 1Yen
  • ベストアンサー率28% (11/39)
回答No.7

なんだか、長いですけどご勘弁 vmstatですが、オライリーの「UNIXシステム管理」を見てみると Linux は自分で入れろって書いてますね。 ま、最近のディストリビューションなら入っているでしょう。 http://www.linux.or.jp/JM/html/procps/man8/vmstat.8.html 入ってるみたいですが...Linuxじゃ page inや、page out は、表示されないのかなぁ? sar コマンドを使うかもしれないですね。こちらは使ったこと無いのでパス。 「sar -p 5 10」 とかかな? 「vmstat 3」とかの結果を頭5行ぐらい見せてくれると分かるかもしれません。 何もしていないのに、HDDがカリカリいってなかなか止まらなかったら って判断方法も無くはない(^^;;; でも、cron さんが、何かしてるって可能性もあるので、その辺を見極める必要があるかも。 と、今頃 free のマニュアルを見てみると... http://www.linux.or.jp/JM/html/procps/man1/free.1.html -o は "バッファの分を増減した行" の表示を無効にする。 このオプションを指定しない限り free は (それぞれ) 使用中のメモリから バッファメモリ を 引き、 未使用のメモリへバッファメモリを足したものを報告する。 という辺りが、masa-kaさんの言う > -/+ buffer/cache の行がバッファキャッシュの量を増減したものなので > 実際にはメモリは17MB使用していて233MB空きがあります。 この事でしょう。しかし、この補足がないと全く分からないです。 # しかし、日本語でも man ってコマンド試しながらでないと全くワカラン。あ、JM,JF,man-jp,doc-jp,...Doc-ja の方々すみません。 # tcshなんてばかでかいマニュアルを1ヶ月で翻訳するなんて、頭が下がります。 vmstat, iostat なんて言うコマンドは一行だけ表示させても正しい値は表示しませんので 2~5 秒ごとに表示するようにして 4行目辺りからの値を信じるようにした方がいいです。 でないと、コマンドが起動するときの値が出ますので、実際より負荷が高く表示されることが多いです。

ssll
質問者

お礼

いろいろと、分かりました。 詳しい説明、どうもありがとうございました。

  • masa-ka
  • ベストアンサー率47% (11/23)
回答No.5

>1、「バッファー」とは大雑把に言って、何ですか。 おおざっぱに言うとデータの一時保存領域です。 バッファキャッシュはディスクからデータを読むときに先読みをして データを保存したり、一度読んだデータをしばらく保存しています。 そうするとディスクへのI/Oが減るので性能が上がります。 余っているメモリがあるとバッファキャッシュに回されるので、空き メモリが少なく見えますが、問題ありません。 メモリが本当に必要になるとバッファキャッシュの量を減らして、必要 なプロセスにメモリを回します。 -/+ buffer/cache の行がバッファキャッシュの量を増減したものなので 実際にはメモリは17MB使用していて233MB空きがあります。 >3、あと、結局のところ、「メモリーが足りなくなってきた」と判断するには、何を見て判断すれば良いのですか。 -/+ buffer/cacheの行のfreeが少なかったり、Swapのusedが多かったりした場合 メモリが足りないと思っていいのではないでしょうか。

ssll
質問者

お礼

問題ないと分かって、ほっとしました。 どうもありがとうございました。

  • 1Yen
  • ベストアンサー率28% (11/39)
回答No.4

> 一般にDaemonと呼ばれるプロセスは普段殆ど動くことがない為に swap に追い出されます。 と書きましたが、Daemon だから swap に追い出されるのではなく、動かないからメモリから追い出されるのです。 ちなみに、今Windows98を使っていますが、メモリ512M積んでいて、アロケート済みメモリが、700Mほど、「現在使用されていない物理メモリのサイズ」が2M。 FreeBSDだと、 90Mぐらい使っててあとは、殆どBufferに回ってます。メモリが勿体無い(笑) Apache,squid,postgresql...よく分からんのにメモリ食われてます。

ssll
質問者

補足

なんとなく核心部分が分かってきました。 まだ、よく分からないのが、 1、「バッファー」とは大雑把に言って、何ですか。 2、>FreeBSDだと、 90Mぐらい使って とありますが、どこを見て90M使っていると分かるのですか。 (freeコマンドの)used ― buffers = 90M ということですか。 3、あと、結局のところ、「メモリーが足りなくなってきた」と判断するには、何を見て判断すれば良いのですか。

  • 1Yen
  • ベストアンサー率28% (11/39)
回答No.3

UNIX系(一般のコンピュータの多くも) 使われていないメモリは、どんどん Disk アクセスのバッファに使います。 何故なら、そこが一番ボトルネックになり易いからです。 ということで、Buffer や、 cash の値が多いのはDiskアクセス時にCPUが遊ぶのを防ぐためだと思います。 また、cron,syslog,lpd...等、一般にDaemonと呼ばれるプロセスは普段殆ど動くことがない為に swap に追い出されます。 実メモリが空いているとアプリケーションを起動した時に swap を起こす必要がなく早く起動できるためです。 (このとき、Bufferの部分を使っても Bufferですから 実体は他のところにあって swap する必要がなく上書きできますね。ま、Write cacheだと、もちろんHDDへ書き出す必要がありますが)

  • blue_leo
  • ベストアンサー率22% (541/2399)
回答No.2

外部からのアクションでなければ基本的に動かしているどこかでスタックオーバー などが起きておかしくなっていることも考えられますね。 うーん、私はここまで(苦笑) 経過を見守ります。

  • blue_leo
  • ベストアンサー率22% (541/2399)
回答No.1

いろんな場合が考えられますが常にJAVAを動かしてDBをリフレッシュするような 処理をしているなどはありませんか? メモリの状態だけでなくタスクがどれくらい走っているか調べないとなんとも。

ssll
質問者

補足

cpuの値は、0.1%程度です。 実は、直前に、ソフトウェアのコンパイルが失敗して、サーバーがダウンしています。 そのときは、電源を再び入れ直してもらって、修復しました。 こんな感じの記事がありました。関係するのでしょうか。 http://www.ibm.co.jp/developerworks/security/overflows-index-j.html

関連するQ&A