依存モジュールのメモリ使用量調査
WAFのメモリ使用量を抑えたいということで、モジュールをuseしたときのメモリを調べてみる。こないだ書いたエントリのスクリプトを少し見やすくしたもの。
#!/usr/bin/env perl use strict; use warnings; use Devel::MemUsed; use Module::Depends; main(); sub main { my $memory_record = record_memory_usage(); } sub record_memory_usage { my $deps = Module::Depends->new->dist_dir('.')->find_modules; foreach my $module ( keys %{ $deps->requires } ) { my $pid = fork(); if ($pid) { # parent wait(); } elsif ( defined $pid ) { my $memused = Devel::MemUsed->new; eval "use $module"; print sprintf( "%35s %08d", $module, $memused ) . "\n"; exit(); } else { die "fork error : $!"; } } }
出力結果をソート
#!/bin/sh perl tools/module_memory.pl | sort -k 2
Angelosの依存モジュールで調べたら以下のような感じ。
Devel::MemUsed 00005128 YAML 00005232 Log::Dispatch::Configurator 00017208 String::CamelCase 00018848 UNIVERSAL::require 00020808 Filter::Util::Call 00022600 Devel::InnerPackage 00023688 Log::Dispatch::Configurator::YAML 00036464 JSON::XS 00070104 Devel::EvalContext 00075048 Term::ReadLine 00079656 Text::SimpleTable 00088048 HTTP::Session 00098288 MIME::Types 00115000 Log::Dispatch::Config 00139528 Error 00158112 Kwalify 00166184 Error::Simple 00166488 Locale::Maketext::Extract 00306040 Locale::Maketext::Simple 00307360 Sub::Exporter 00320272 FindBin::libs 00424320 App::CLI 00505976 Module::Pluggable::Object 00539656 Mouse 00634128 File::Find::Rule 00646984 Template 00860216 Path::Class 01099304 Pod::Simple::Text 01103248 HTTP::Engine 01738008 Module::Setup 05867920 HTTP::Router 07199320
HTTP::Routerがメモリをくってるのは現状の版がMooseだからで、これは将来的にMouseに置き換えれば数Mbは削減できるはず。
こうみると、Path::Classが若干メモリ食い過ぎな感じ。あとはエンジンコアで使ってない物が多いからそれほど問題にならなそうかな。