- - PR -
Linux のガベッジコレクション
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2006-11-01 18:35
シリアルデバイスから read() してファイルに write()するだけのプログラムで、長時間稼動し
続けていると /dev/shm が 0% Availableになるまでメモリを食ってしまい、vi すら起動しなく なってしまいますが、(/tmp が /dev/shm 配下にシンボリックリンクされてます)Linux では tmpfs でメモリ上に確保された領域を優先的に消費していく仕組みなのでしょうか? /etc/fstab には none /dev/shm tmpfs noauto 0 0 と書きました。 read/write 用のグローバル変数は同じアドレスを指してるので、そのバッファにデータを読んだり 書いたりするだけやのに、どんどん新しい領域を確保しようとしてるように見える。/dev/shm を完全に 喰い尽くした後は、ページサイズの 4K づつ残ったメモリ領域を消費していきます。 なんとかこれを抑制する方法は無いもんでしょうか? | ||||
|
投稿日時: 2006-11-03 15:57
カーネルのバージョンによって微妙に違うかもしれませんが、基本的にはメモリの空き容量に近いと思ってました。 一応ファイルシステムなので/tmpにファイルを置いたら消費すると思いますが、スワップ可能らしいので 単にメモリを食いつぶしただけということもあるかもしれません。 メモリリーク監視ツールなどで調べて見たらいかがでしょう? | ||||
1
