原です。

In message "[ruby-list:9354] Re: shttpsrv-1.0 & grepsvr-1.1"
    on 98/08/31, Yukihiro Matsumoto <matz / netlab.co.jp> writes:
|
|まつもと ゆきひろです

||4日!! こっちの DX4 マシンでも 1 日だったのに。無限ループには
||ならないので、そのうち必ず結果はでると思います。(^^;
|
|いや,そのままだと1分で止まったんですが,それだと現象が違っ
|たんですよね(reallocが2回失敗した).んで,swapを大量に追加し
|たのですが,それがいけなかった(?)みたい.今24087辺りを処理
|してます.

最初の数万の数字のソートでこけることもあるようです。しかし
こちらの比較的大きな機械ではそこは余裕でクリアして、その後
でいろいろな現象が。

|んで,結局はメモリ(+swap)領域の不足が根本原因のような気がし
|ます(それによるmallocの誤動作も疑ってます).まだ,断言できま
|せんが,もしそうならもうちょっとメモリを使わないプログラムに
|することが逃げ道かも知れません.

基本的には少しずつデータを必要な部分だけアペンドして行く作りに
なっているんですが、何かのきっかけでデータが壊れて最初から作り
直しになったので、こんなメモリ大食い状況になっています。いずれ
にしてももうひと工夫ないとまずいと思っています。

ところで、メモリの節約について質問なのですが、Hash に大量なデ
ータを記録する事があるとして、それを DBM に変更するとメモリの
節約になりますかね。つまり

fbm = DBM.open("data")
while true
   ...
   dbm[foo] = bar


としたとき、実際に "data" に情報を書き込むのは fbm.close した
時ですか?それともあるのバッファがいっぱいになった時でしょうか。