[Namazu-users-ja 269] Re: Out of Memory

Tadamasa Teranishi yw3t-trns @ asahi-net.or.jp
2005年 2月 1日 (火) 20:28:56 JST


寺西です。

nakashima-k wrote:
> 
> 環境
> RedHatLinux 9
> namazu2.0.13

Namazu 2.0.14 をお使いください。

> Perl 5.6.1
> nkf 1.9

パッチがあたっているかもしれませんが、NKF 2.0.4 以降を使用してください。

> kakasi 2.3.2

kakasi 2.3.4 をお使いください。
という前置きをしておいて、

> 巨大なExcelファイルを処理したときのみということですが、自分のところ
> で発生している事象では、224KBのExcelファイルをxlhtml0.5.1で処理すると 
> 約200MB のhtmlファイルに膨れ上がってしまうという物で、いくら
> $FILE_SIZE_MAXを下げても以下のメッセージが出力されて
> 「Out of memory!」となってしまいます。(メモリは1GB)

$ perl -d /usr/local/bin/mknmz 引数 excelファイル
DB<1> t
DB<2> c

として、どこで落ちているかわかるでしょうか。(最後の方は後処理で 
DESTORY を呼んでいるかと思いますので、Out of Memory 近辺の情報が重要)

> 200〜数十MBのhtmlをパースするのはリソースを消費するのはよくわかりますが、
> このようにExcelとhtmlファイルのファイル容量がかけ離れた場合の対処は、ど
> の様にするべきかわからずメールをしました。

そういうファイルを無視しても良いのであれば、
$TEXT_SIZE_MAX ではじくことができる<はず>ですが、無理でしょうか?
# と書きつつ、無理な気がしてきました。

filter/excel.pl の filter_xl サブルーチンの

   util::systemcmd("$xlconvpath -m $tmpfile > $tmpfile2");

の後に

    my $size = util::filesize($tmpfile2);
    if ($size > $conf::TEXT_SIZE_MAX) {
        unlink($tmpfile);
        unlink($tmpfile2);
        return 'too_large_excel_file';
    }

をつければ、はじくことができるかと思います。
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns @ asahi-net.or.jp
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E




Namazu-users-ja メーリングリストの案内