ithread 配下で Scalars leaked
Amazon Search のスレッド実行時に Perl のメモリーリークエラーが発生していたので、いろいろ調査。詳細な原因は特定できていないのですが、例えば perl 5.8.x の ithread においてはスレッド内で eval を使用すると、Scalars leaked が発生するようです。例えば、次のコードを linux な環境で実行して見て下さい。
perl -Mthreads -e 'eval q{threads->new(sub{})->join}'
結果は、「 Scalars leaked: 1 」と出力されると思います。何がダメなんでしょうね・・・。このバグとはちょっと関係ないですが、thread::shared で変数を共有する際に何十メガもの巨大なデータを共有するとパフォーマンスが信じられない程に低下しますね。どこがパフォーマンス低下の原因か特定が困難でハマリました・・・。
perl -Mthreads -e 'eval q{threads->new(sub{})->join}'
結果は、「 Scalars leaked: 1 」と出力されると思います。何がダメなんでしょうね・・・。このバグとはちょっと関係ないですが、thread::shared で変数を共有する際に何十メガもの巨大なデータを共有するとパフォーマンスが信じられない程に低下しますね。どこがパフォーマンス低下の原因か特定が困難でハマリました・・・。
- スポンサーリンク -
コメントやシェアをお願いします!