- - PR -
topコマンドでのメモリ使用量が合いません
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-02-18 19:07
みなさん、こんにちは。
メモリの使用量の調べ方についてご教授下さい。 客先にメモリサイズ512MBのサーバを導入しています。 (RedHatLinux9+Apache+tomcat+PostgreSQL) メモリ使用量が常に500MB近いということで「なにがそんなにメモリを消費しているのか詳細を説明せよ」という問合せがありました。 さっそく調べ始めようと「top n 1 b」を実行したのですが、topのヘッダー部分Memのusedが明細部分のどの項目の合計値にも合いません。 明細部の%Memを合計しても34.2%にしかならないのですが、topでは表示されないがメモリを消費している「何か」があるのでしょうか? その「何か」をご存知の方がいらっしゃいましたら教えて頂けますでしょうか。 どうぞ宜しくお願い致します。 以下「top n 1 b」の結果です。 17:54:54 up 51 days, 20:30, 4 users, load average: 0.04, 0.16, 0.17 101 processes: 85 sleeping, 1 running, 0 zombie, 15 stopped CPU states: 0.4% user 0.2% system 0.0% nice 0.0% iowait 99.2% idle Mem: 513744k av, 498744k used, 15000k free, 0k shrd, 116092k buff 362328k actv, 0k in_d, 7912k in_c Swap: 522104k av, 82304k used, 439800k free 211256k cached PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND 4199 root 25 0 92232 90M 19224 S 0.0 17.9 1:29 0 java 28483 root 15 0 15460 11M 4696 S 0.0 2.2 0:07 0 nautilus 4139 root 15 0 9640 9636 6780 S 0.0 1.8 0:00 0 gnome-termina 4011 root 16 0 9252 9248 6512 S 10.5 1.8 32:06 0 gnome-system- 2131 root 16 0 24076 7332 700 S 14.3 1.4 63:22 0 X (中略) 1564 rpcuser 25 0 80 0 0 SW 0.0 0.0 0:00 0 rpc.statd 1828 wnn 24 0 3348 0 0 SW 0.0 0.0 0:00 0 jserver 2092 root 15 0 632 0 0 SW 0.0 0.0 0:00 0 gdm-binary 2130 root 15 0 796 0 0 SW 0.0 0.0 0:00 0 gdm-binary [ メッセージ編集済み 編集者: なんでも屋 編集日時 2006-02-18 19:07 ] | ||||
|
投稿日時: 2006-02-19 04:18
top でも一応表示されていますが、アプリごとではないので明細部には出てきません。 buffers や cached と表示されているものです。 実は私も詳しく無いのですが、ディスクI/Oのキャッシュ等だったと思います。 buffers と cached の違いなどについて詳しい方居られたら教えてください。 498744 - 116092 - 211256 = 171396 kbytes がアプリが使用しているメモリ量だと思います。 171396 / 513744 * 100 = 33.4% で、明細部の合計とちょっと違いますが、 これは明細部の表示の際の誤差の積み重なりだと思います。 毎回こんな計算は嫌ですね。 幸い free を使えば、「-/+ buffers/cache」の行に、buffers と cached を引いた値が表示されます。 | ||||
|
投稿日時: 2006-02-20 14:40
cn009さん、ありがとうございます。
少しづつ見えてきました。 つまり・・・ freeの結果が total used free shared buffers cached Mem: 513744@ 499040A 14704B 0C 130588D 191128E -/+ buffers/cache: 177324F 336420G Swap: 522104H 83960I 438144J @総メモリ量 A使用済み B空き C共有用 Dバッファ用 Eキャッシュ用 Fアプリでの使用量 Gアプリで使える空き容量 Hスワップ容量 Iスワップ使用済み Jスワップ空き 先に進む前にこの@〜Jの定義は合っていますでしょうか? 次に私は以下のように理解したのですがいかがでしょうか? 1.「@総メモリ量」から「Fアプリでの使用量」を引いた分がCDEに割り振われる ちなみに@-F=C+D+E(513744-177324)=(14704+130588+191128)=336420 2.この336MB分はLinuxがディスクのI/Oの為に用意している領域である 3.「Fアプリでの使用量」はtop n 1 bコマンドで表示された明細部分の合計と ほぼ同じとなる つまり今回の場合だと「全メモリ中65.8%がディスクのI/Oに費やされている」と結論付けて良いのでしょうか? なお、buffersとcachedの違いですが、それぞれ用語集を参照すると buffer:複数の機器やソフトウェアの間でデータをやり取りするときに、処理速度や転送速度の差を補うためにデータを一時的に保存しておく記憶装置や記憶領域のこと。 cache:使用頻度の高いデータを高速な記憶装置に蓄えておくことにより、いちいち低速な装置から読み出す無駄を省いて高速化すること。また、その際に使われる高速な記憶装置。 となっておりました。 | ||||
|
投稿日時: 2006-02-20 22:06
それなりにファイルアクセスしているLinux機は、起動後長時間
経つとメモリの使用率が98%ほどになります。以上。 ・・・で、いいと思うんだけどなあ。 ってか、Linuxに限らずサーバに使うようなOSはほとんどすべて 似たような挙動をするはずなので。 buffersとはバッファキャッシュの量。これ以上説明しようとすると ファイルシステムの話からはじめなくてはならないので省略。 cachedはファイルキャッシュの量。HDDから一度読み込んだ ファイルは、後に再度読み込むことになる可能性が高いので、 メモリ上に維持される。それがファイルキャッシュ。 free(1)の -/+ の行は、usedからバッファキャッシュ・ファイル キャッシュを差し引いた量(内容を捨てるわけにはいかないメモリ) と、freeにバッファキャッシュ・ファイルキャッシュを加えた量 (必要があれば使えるメモリ)です。 | ||||
|
投稿日時: 2006-02-22 11:00
ぽんすさん、ありがとうございます。
>それなりにファイルアクセスしているLinux機は、起動後長時間 >経つとメモリの使用率が98%ほどになります。以上。 私もこれで良いと思います。 というかこれしかないと思ってます。 しかし、納得してもらえる可能性は低いです。 結局は「used」の数値が高いのが気になるらしく「ここの数値を下げよ」ということらしいのです。 「used」の数値、つまりは「free」「buffers」「cached」の数値を、設定で変えることは可能なのでしょうか? しかし、変更できたとしても、他に問題出そうな気がするのですが・・・ | ||||
|
投稿日時: 2006-02-22 14:40
>局は「used」の数値が高いのが気になるらしく「ここの数値を下げよ」ということらしいのです。
説明して納得させるのも難儀そうですね。 コレが参考になるような気がします。 /procによるLinuxチューニング [後編] http://www.atmarkit.co.jp/flinux/special/proctune/proctune02a.html (試したわけではないので無意味かもしれません・・・) | ||||
|
投稿日時: 2006-02-22 19:19
TOP の結果からですが、
要らないサービスがあがってたりしてません? | ||||
|
投稿日時: 2006-02-22 21:33
カーネル2.2の頃は、/proc/sys 以下のパラメータでfreeを確保する量を チューニングできましたが、カーネル2.4以降ではできません。 カーネルソース中にハードコーディングされています。 # カーネルソースを書き換えれば変更できますが どうしてもusedを減らしたいのであれば、週次あるいは日次でのリブート ということになるでしょう。定期リブートをするのは、悪い考えでは ないと思います。 # 日次でも足りなければどうしようもなさそうですが。 |