プロが教えるわが家の防犯対策術!

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も使われています。これは、正常な値でしょうか。そもそも、バッファーというのは、何を表しているのでしょうか。)

A 回答 (7件)

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 …
を見たところ、やはり無さそうですね。
ちょっと思いつかないです。

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 等の値を見ることができると思います。
これらの値が多いと、一度にメモリ上に必要なプログラム等がロード出来ていない == メモリが足りない と言えるでしょう。
どの程度で足りないかは、その人の感覚次第(^^;;;
# それ以外にも、多くの情報が出力されるので シロートの私には難解(^^;;;
    • good
    • 0

なんだか、長いですけどご勘弁


vmstatですが、オライリーの「UNIXシステム管理」を見てみると Linux は自分で入れろって書いてますね。
ま、最近のディストリビューションなら入っているでしょう。
http://www.linux.or.jp/JM/html/procps/man8/vmsta …
入ってるみたいですが...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. …
-o は "バッファの分を増減した行" の表示を無効にする。 このオプションを指定しない限り free は (それぞれ) 使用中のメモリから バッファメモリ を
引き、 未使用のメモリへバッファメモリを足したものを報告する。

という辺りが、masa-kaさんの言う
> -/+ buffer/cache の行がバッファキャッシュの量を増減したものなので
> 実際にはメモリは17MB使用していて233MB空きがあります。
この事でしょう。しかし、この補足がないと全く分からないです。
# しかし、日本語でも man ってコマンド試しながらでないと全くワカラン。あ、JM,JF,man-jp,doc-jp,...Doc-ja の方々すみません。
# tcshなんてばかでかいマニュアルを1ヶ月で翻訳するなんて、頭が下がります。

vmstat, iostat なんて言うコマンドは一行だけ表示させても正しい値は表示しませんので 2~5 秒ごとに表示するようにして
4行目辺りからの値を信じるようにした方がいいです。
でないと、コマンドが起動するときの値が出ますので、実際より負荷が高く表示されることが多いです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/02/13 03:23

>1、「バッファー」とは大雑把に言って、何ですか。



おおざっぱに言うとデータの一時保存領域です。
バッファキャッシュはディスクからデータを読むときに先読みをして
データを保存したり、一度読んだデータをしばらく保存しています。
そうするとディスクへのI/Oが減るので性能が上がります。

余っているメモリがあるとバッファキャッシュに回されるので、空き
メモリが少なく見えますが、問題ありません。
メモリが本当に必要になるとバッファキャッシュの量を減らして、必要
なプロセスにメモリを回します。

-/+ buffer/cache の行がバッファキャッシュの量を増減したものなので
実際にはメモリは17MB使用していて233MB空きがあります。

>3、あと、結局のところ、「メモリーが足りなくなってきた」と判断するには、何を見て判断すれば良いのですか。

-/+ buffer/cacheの行のfreeが少なかったり、Swapのusedが多かったりした場合
メモリが足りないと思っていいのではないでしょうか。
    • good
    • 0
この回答へのお礼

問題ないと分かって、ほっとしました。

どうもありがとうございました。

お礼日時:2001/02/13 03:24

> 一般にDaemonと呼ばれるプロセスは普段殆ど動くことがない為に swap に追い出されます。


と書きましたが、Daemon だから swap に追い出されるのではなく、動かないからメモリから追い出されるのです。

ちなみに、今Windows98を使っていますが、メモリ512M積んでいて、アロケート済みメモリが、700Mほど、「現在使用されていない物理メモリのサイズ」が2M。
FreeBSDだと、 90Mぐらい使っててあとは、殆どBufferに回ってます。メモリが勿体無い(笑)
Apache,squid,postgresql...よく分からんのにメモリ食われてます。

この回答への補足

なんとなく核心部分が分かってきました。

まだ、よく分からないのが、

1、「バッファー」とは大雑把に言って、何ですか。

2、>FreeBSDだと、 90Mぐらい使って

とありますが、どこを見て90M使っていると分かるのですか。

(freeコマンドの)used ― buffers = 90M ということですか。

3、あと、結局のところ、「メモリーが足りなくなってきた」と判断するには、何を見て判断すれば良いのですか。

補足日時:2001/02/12 08:12
    • good
    • 0

UNIX系(一般のコンピュータの多くも) 使われていないメモリは、どんどん Disk アクセスのバッファに使います。


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

外部からのアクションでなければ基本的に動かしているどこかでスタックオーバー


などが起きておかしくなっていることも考えられますね。

うーん、私はここまで(苦笑)
経過を見守ります。
    • good
    • 0

いろんな場合が考えられますが常にJAVAを動かしてDBをリフレッシュするような


処理をしているなどはありませんか?

メモリの状態だけでなくタスクがどれくらい走っているか調べないとなんとも。

この回答への補足

cpuの値は、0.1%程度です。

実は、直前に、ソフトウェアのコンパイルが失敗して、サーバーがダウンしています。

そのときは、電源を再び入れ直してもらって、修復しました。

こんな感じの記事がありました。関係するのでしょうか。
http://www.ibm.co.jp/developerworks/security/ove …

補足日時:2001/02/12 03:08
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!