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

Posted on 11月 12, 2009
Filed Under perl |

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

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

なんでだろと調べる

サーバ1で

CODE:
  1. perl -V
  2. Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
  3.   Platform:
  4.     osname=linux, osvers=2.6.26-1-686, archname=i486-linux-gnu-thread-multi
  5. ...
  6.     use64bitint=undef, use64bitall=undef, uselongdouble=undef
  7. ...
  8.   Compiler:
  9.     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',
  10.     optimize='-O2 -g',
  11.     cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include'
  12.     ccversion='', gccversion='4.3.2', gccosandvers=''
  13.     intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
  14.     d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
  15.     ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
  16.     alignbytes=4, prototype=define

サーバ2で

CODE:
  1. Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
  2.   Platform:
  3.     osname=linux, osvers=2.6.26-1-vserver-amd64, archname=x86_64-linux-gnu-thread-multi
  4. ...
  5.     use64bitint=define, use64bitall=define, uselongdouble=undef
  6. ...
  7.   Compiler:
  8.     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',
  9.     optimize='-O2 -g',
  10.     cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include'
  11.     ccversion='', gccversion='4.3.2', gccosandvers=''
  12.     intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
  13.     d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
  14.     ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
  15.     alignbytes=8, prototype=define

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

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

サーバ1で

CODE:
  1. % script/gtop.pl 'use Catalyst'
  2. 10.5M : use Catalyst
  3. % script/gtop.pl 'use DBIx::Class'
  4.  396k : use DBIx::Class
  5. % script/gtop.pl 'use Moose'
  6. Moose does not export its sugar to the 'main' package.
  7.  4.6M : use Moose

fmfm

サーバ2で

CODE:
  1. % script/gtop.pl "use Catalyst"
  2. 42.6M : use Catalyst
  3. % script/gtop.pl "use DBIx::Class"
  4.  920k : use DBIx::Class
  5. % script/gtop.pl "use Moose ()"
  6. 17.9M : use Moose ()

!!!

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

Comments

Leave a Reply