2011年7月10日

[Namazu-devel-ja 1835]File::MMagicのパッチ (mknmz のメモリ消費)

臼田です

mknmzのメモリ消費については以前より課題になっています。

メモリリークを見つけるために
Devel::Leak というツールがあるという記事を見かけました。
http://blog.livedoor.jp/dankogai/archives/50708868.html
気になるサブルーチン呼び出しの前後で比較してみたところ


File::MMagic::checktype_byfilename
が循環参照をしており、メモリリークをしているようだという
ことをみつけました。

循環参照でのメモリリ?クを防ぐために
Scalar::Util::weaken というものがあるようなのでこれを
使ってみたところこの部分の問題は解消されました。

$ diff -u MMagic.pm.org MMagic.pm
--- MMagic.pm.org 2011-07-09 00:01:19.000000000 +0900
+++ MMagic.pm 2011-07-09 21:46:42.000000000 +0900
@@ -302,6 +302,7 @@

use FileHandle;
use strict;
+use Scalar::Util;

use vars qw(
%TEMPLATES %ESC $VERSION
@@ -715,6 +716,7 @@

$fname =~ s/^.*\///;
for my $regex (keys %{$self->{FILEEXTS}}) {
+ Scalar::Util::weaken($self->{FILEEXTS});
if ($fname =~ /$regex/i) {
if ((defined $type && $type !~ /;/) || (! defined $type)) {
$type = $self->{FILEEXTS}->{$regex}; # has no x-type param


上記とは別に
mknmz 内にはグローバル変数に文字列を追加し続ける
mknmz::count_words と mknmz::make_phrase_hash の前後でも
参照数が増え続けています。
こちらは原因が違うので同じ対処方法は使えないようです。

臼田幸生

投稿者 xml-rpc : 2011年7月10日 10:33
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/105157
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。