maaash.jp

what I create

[perl]32bit/64bitでメモリ使用量違うけど

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

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

なんでだろと調べる

サーバ1で

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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[/code]

サーバ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

1
2
3
4
5
6
7

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

<a href="http://iandeth.dyndns.org/mt/ian/archives/000624.html" onclick="javascript:_gaq.push(['_trackEvent','outbound-article','http://iandeth.dyndns.org/mt/ian/archives/000624.html']);">モジュールをuseした際のメモリ使用量(増加量)を調べてみる</a>で紹介されていた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
[/code]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 ()
[/code]!!!

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

Comments