- PR -

Linux のガベッジコレクション

1
投稿者投稿内容
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 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 づつ残ったメモリ領域を消費していきます。
なんとかこれを抑制する方法は無いもんでしょうか?
Console
ベテラン
会議室デビュー日: 2005/09/10
投稿数: 65
お住まい・勤務地: 石川県金沢市
投稿日時: 2006-11-03 15:57
引用:

コブラさんの書き込み (2006-11-01 18:35) より:
 シリアルデバイスから read() してファイルに write()するだけのプログラムで、長時間稼動し
続けていると /dev/shm が 0% Availableになるまでメモリを食ってしまい、vi すら起動しなく
なってしまいますが、(/tmp が /dev/shm 配下にシンボリックリンクされてます)Linux では
tmpfs でメモリ上に確保された領域を優先的に消費していく仕組みなのでしょうか?



カーネルのバージョンによって微妙に違うかもしれませんが、基本的にはメモリの空き容量に近いと思ってました。
一応ファイルシステムなので/tmpにファイルを置いたら消費すると思いますが、スワップ可能らしいので
単にメモリを食いつぶしただけということもあるかもしれません。

メモリリーク監視ツールなどで調べて見たらいかがでしょう?
1

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