同じperlのコードを、2台の違うサーバで動かした時に、やたらメモリ量が違うなぁと。

サーバ1: 50MBくらい
サーバ2: 200MBくらい

なんでだろと調べる

サーバ1で

perl -V
Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
Platform:
osname=linux, osvers=2.6.26-1-686, archname=i486-linux-gnu-thread-multi  
...  
use64bitint=undef, use64bitall=undef, uselongdouble=undef  
...  
Compiler:  
cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',  
optimize='-O2 -g',  
cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include'  
ccversion='', gccversion='4.3.2', gccosandvers=''  
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234  
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12  
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8  
alignbytes=4, prototype=define

サーバ2で

Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
Platform:
osname=linux, osvers=2.6.26-1-vserver-amd64, archname=x86_64-linux-gnu-thread-multi  
...  
use64bitint=define, use64bitall=define, uselongdouble=undef  
...  
Compiler:  
cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',  
optimize='-O2 -g',  
cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include'  
ccversion='', gccversion='4.3.2', gccosandvers=''  
intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678  
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16  
ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8  
alignbytes=8, prototype=define  

longsize, ptrsizeとかが違う
32bit → 64bit!

モジュールをuseした際のメモリ使用量(増加量)を調べてみるで紹介されていたGTopのスクリプトを使ってみる

サーバ1で

% script/gtop.pl 'use Catalyst'  
10.5M : use Catalyst  
% script/gtop.pl 'use DBIx::Class'  
396k : use DBIx::Class  
% script/gtop.pl 'use Moose'  
Moose does not export its sugar to the 'main' package.  
4.6M : use Moose  

fmfm

サーバ2で

% script/gtop.pl "use Catalyst"  
42.6M : use Catalyst  
% script/gtop.pl "use DBIx::Class"  
920k : use DBIx::Class  
% script/gtop.pl "use Moose ()"  
17.9M : use Moose ()  

!!!

搭載してるメモリ量は4GBとかで変わらないから、
リスクが無ければ32bitでコンパイルしたperlを使ったりするもんなのだろうか?