Namazu-users-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Out of memory



さいのです

In article <200007060626.AA00495@xxxxxxxxxxxxxxxxxxxxx>
maeda@xxxxxxxxxxxxxxx writes:

>>どうも前田です。
>>申し訳ないです。また質問です。
>>過去メールなど読んで色々試してみたのですがギブアップです。
>>
>>mknmz を実行すると Out of memory! が出てしまいます。
>>過去メールなど読んで色々試しました。
>>
>>・$ON_MEMORY_MAX の値を変更する。(上げても下げてもOut of memory!)
>># ~/namazu-2.0.4/confにある"mknmzrc-sample"を"mknmzrc"に名前を変更して
>># その中の $ON_MEMORY_MAX の値を変更しました。(あってますか?)
>>
>>・オプションをつける
>>mknmz -s
>>mknmz -F
>>mknmz --checkpoint
>>mknmz -sF
>>mknmz -O
>>
>># すべてダメ。。

Out of memory! は様々なケースで発生するので一概に何をすれば解決する,
とは言えない部分があるようです。INDEX対象が10,000件以上ということです
ので,取り敢えず以下のことをやってみてはいかがでしょうか?

$ON_MEMORY_MAX を小さくする (既に試してますね)
$FILE_SIZE_MAX を小さくする
$TEXT_SIZE_MAX を小さくする
$WORD_LENG_MAX を小さくする
繰り返しmknmzする場合は,事前にgcnmzしておく。

でも駄目なら最後の手段ということで,インデックス対象ファイルリストを
予め作成しておき,1000ファイル位づつにスプリットして -YZ オプションを
付けて mknmz を行います。私はこの方法で30,000件(ファイル)以上のファ
イルをインデックス化してます。言葉で説明するとややこしいので,シェル
スクリプトを以下に記します。基本的にcronでも動くように書いてます。

#!/sbin/sh
export LANG=ja_JP.eucJP     # ロケールの指定はOSによって異なります
export PATH=/bin:/usr/bin:/usr/sbin:/usr/local/bin      # パスの指定
cd /usr/local/var/namazu/index  # cronでも動くようディレクトリを移動
cat FILE.BAK > FILE.A                           # 空ファイルの初期化
mv FILE.A FILE.BAK
find /home/data -print | grep -i .html$ > FILE  # 対象ファイルの抽出
find /home/data -print | grep -i .html$ >> FILE
find /home/data -print | grep -i .txt$ >> FILE
find /home/data -print | grep -i .text$ >> FILE
comm -13 FILE.BAK FILE | sort > FILE.CUR        # 繰り返し実行時既に
mv FILE FILE.BAK              # インデックス化したものを対象外にする
split -1000 FILE.CUR    # インデックス対象を1000ファイルづつにわける
for flist in `ls x*`          # splitしたファイルを一つづつmknmzする
do
        /usr/local/bin/mknmz -sYZ -F $flist 
done
rm x*                                    # splitしたファイル郡を消す


ディレクトリパスなどは適当に変更して使ってください。
因に,実際私が使っているスクリプトはもうちょっと複雑になってます。

これが参考になれば幸です。

では。