臼田です。 namazu-devel-ja 向きなので、そちらに移しましょう。
On 2011/07/09, at 21:10, Shigekazu Aoyagi wrote: > > 100MBを越えるPDFをインデクシングしようとすると、mknmzがメモリ不足を > 起こすという現象がありました。 > mknmzを追いかけてみたところ、830行目の次のところで落ちていました。 > > $mtype_m = $Magic->checktype_magic($$contref) > if ((! defined $mtype_c) || > $mtype_c =~ > /^(text\/html|text\/plain|application\/octet-stream)$/); > > ファイル全体を $confref に読み込み、checktype_magic() にコピーで渡して > 更に File::Magic 内でもコピーで渡されてという処理を繰り返している内に > メモリ使用量が爆発してしまったようです。 $Magic->checktype_magic() ではファイル先頭の magic data を チェックしているのでファイルの全体は必要ありません。 また、 $Magic->checktype_data() 内では受け取った値の 先頭部分を 切りとってから使用しています。 なので、mknmz から File::MMagic には先頭部分だけを渡せば 十分と思われます。 $ diff -u scripts/mknmz.org scripts/mknmz --- scripts/mknmz.org 2011-07-11 21:21:23.000000000 +0900 +++ scripts/mknmz 2011-07-11 21:24:04.000000000 +0900 @@ -824,10 +824,11 @@ } elsif (defined $mmtype) { $mtype = $mmtype; } else { + my $truncatedcont = substr($$contref, 0, 0x8564); my $mtype_n = $Magic->checktype_byfilename($cfile); - my $mtype_c = $Magic->checktype_data($$contref); + my $mtype_c = $Magic->checktype_data($truncatedcont); my $mtype_m; - $mtype_m = $Magic->checktype_magic($$contref) + $mtype_m = $Magic->checktype_magic($truncatedcont) if ((! defined $mtype_c) || $mtype_c =~ /^(text\/html|text\/plain|application\/octet-stream)$/); といった感じでいかがでしょうか。 臼田幸生 _______________________________________________ Namazu-users-ja mailing list Namazu-users-ja@namazu.org http://www.namazu.org/cgi-bin/mailman/listinfo/namazu-users-ja