- PR -

メモリ遷移について

1
投稿者投稿内容
とっちぃ
会議室デビュー日: 2003/12/09
投稿数: 9
投稿日時: 2003-12-09 16:22
みなさまこんにちわ♪とっちぃ@Linux初心者です。

今回、プロセス"ABC"でメモリリークが発生していることが判明し、
プロセス"ABC"を再起動しました。
プロセス"ABC"を再起動することによって、VSZが505240K→5764Kへ減少しました。

---再起動前のプロセス遷移(1時間毎)
USER PID PPID VSZ RSS STIME START TIME PAGEIN COMMAND
XXX 5014 4993 503356 499736 Oct29 Oct 29 01:47:50 857521 ./AAA
XXX 5014 4993 504004 500384 Oct29 Oct 29 01:48:00 858641 ./AAA
XXX 5014 4993 504664 501044 Oct29 Oct 29 01:48:10 859740 ./AAA
XXX 5014 4993 505240 501620 Oct29 Oct 29 01:48:19 860704 ./AAA
※VSZが増加しているのが分かります。

---再起動後のプロセス遷移
XXX 4137 4116 5764 1912 14:30 14:30 00:00:00 299 ./AAA

しかし、freeの値を確認すると、再起動前と再起動後の値では、ほとんど変化
が見られません。

---再起動前のfree
total used free shared buffers cached
Mem: 1027872 961868 66004 20856 25952 725140
-/+ buffers/cache: 210776 817096
Swap: 2048276 2368 2045908

---再起動後のfree
total used free shared buffers cached
Mem: 1027872 986508 41364 20856 25952 737540
-/+ buffers/cache: 223016 804856
Swap: 2048276 2368 2045908

freeで出される値とpsで出されるVSZの値というのはリンクしていないのでしょうか?

OSはLinux REDHAD7.3です

宜しくお願いいたします。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-12-09 17:03
引用:

freeで出される値とpsで出されるVSZの値というのはリンクしていないのでしょうか?


Linuxは、空いている物理メモリを使って可能な限りディスクキャッシュを行います。
そのため、プロセスがメモリを使っていなくても、freeの値がとても小さく見えます。

コード:
---再起動後のfree 
     total   used   free  shared buffers cached 
Mem: 1027872 986508 41364 20856  25952   737540 


というわけで、キャッシュに約730MB近く使っています。
プロセスがどんどんメモリを食うにつれてこの値は減ります。
とっちぃ
会議室デビュー日: 2003/12/09
投稿数: 9
投稿日時: 2003-12-10 10:03
おばけさん。レスありがとうございます。

つまりLinuxは、

@物理メモリをディスクキャッシュする。
Aプロセスがメモリを食うにつれてディスクキャッシュが減少する
Bディスクキャッシュが足りなくなるとスワップアウトする。

という流れとなるのでしょうか?

ここ1ヶ月のデータをトレースしてみると、

プロセス"ABC"は500Mのメモリリークを起こしています。(VSZ)
しかし、キャッシュの減少もみられず、スワップアウトも
3M程度しか発生しておりません。

僕の推理が正しければ、スワップアウトがもっと発生しても
良いのかと思ってしまうのですが、これはご認識なのでしょうか?

おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-12-10 10:25
引用:

つまりLinuxは、

@物理メモリをディスクキャッシュする。
Aプロセスがメモリを食うにつれてディスクキャッシュが減少する
Bディスクキャッシュが足りなくなるとスワップアウトする。

という流れとなるのでしょうか?


ディスクキャッシュは、ディスクI/Oに対するキャッシュですのでスワップとは違うと思います。
プロセスの使用するメモリ量が増加したとしても、最終的にディスクキャッシュがゼロになる
とは思いません。

例えば全物理メモリが1GBであるとして、ディスクキャッシュの最低量が128MBであるとすると、
プロセスが使用できるメモリ量の限度は大体896MBくらいなわけですが、これを超えて
プロセスにメモリをアロケートしようとするとスワップが始まるのだと思います。

引用:

プロセス"ABC"は500Mのメモリリークを起こしています。(VSZ)
しかし、キャッシュの減少もみられず、スワップアウトも
3M程度しか発生しておりません。


つまり、物理メモリ量が1GBと多いため、起動しているプロセスが消費しているメモリと
ディスクキャッシュサイズの合計が(メモリリーク量を加味しても)それより小さかったわけですね。

大容量メモリを搭載すると(昨今1GBで大容量と言うかどうかは分かりませんが)、このように
「スワップをほとんど使わない」状態になります。

P.S. 実際は、メモリを使用するのはプロセスとディスクキャッシュだけではないと思います。

[ メッセージ編集済み 編集者: おばけ 編集日時 2003-12-10 10:26 ]
Keisuke
大ベテラン
会議室デビュー日: 2003/10/24
投稿数: 105
投稿日時: 2003-12-10 12:35
スワップされなくても、使われないメモリはページアウトされています。
相当負荷が高く無くてはスワップが定常的に発生する事は無いと思います。
1

スキルアップ/キャリアアップ(JOB@IT)