Devel::Leak::Objectでメモリーリークチェック
メモリーリークしてないかを簡単に確かめるためのスクリプトも作ってみた。以下のように使う。
- Devel::Leak::Objectを使う
- 実行回数を変えて実行する
- 実行回数に応じてDevel::Leak::Objectで出力されるオブジェクト数が増えるものがあれば、それがLeakしている
#!/usr/bin/env perl use strict; use warnings; use lib 't/lib'; use Devel::Leak::Object qw{ GLOBAL_bless }; use Test::TCP; use TestApp::Web; use HTTP::Engine; use LWP::UserAgent; use Getopt::Long; use Pod::Usage; my %argv = ( module => 'ServerSimple', port => empty_port(), loop => 1, ); GetOptions( \%argv, "module=s", "port=i", "loop=i", "help", ) or $argv{help}++; pod2usage(2) if $argv{help}; my $module = $argv{module};; my $port = $argv{port}; my $loop = $argv{loop}; test_tcp( client => sub { my $port = shift; my $ua = LWP::UserAgent->new; for ( 0 .. $loop ) { $ua->get("http://localhost:$port/"); } }, server => sub { my $port = shift; my $engine = TestApp::Web->new( server => $module, port => $port, ); $engine->setup; $engine->run; }, );
だんだん小物ツールが充実して便利になってきた
http://github.com/dann/angelos/tree/master/tools
# 面倒なので自動化した
memory_leak.sh
perl tools/memory_leak.pl --loop 1 > memory_leak_1.txt perl tools/memory_leak.pl --loop 10 > memory_leak_100.txt diff -uNr memory_leak_1.txt memory_leak_100.txt rm -f memory_leak_1.txt rm -f memory_leak_100.txt