アプリケーションのパフォーマンス テスト中に、ある種のメモリ回帰テストを実行したい場合があります。この記事には、perl で記述された 2 つのメモリ回帰スクリプトが含まれています。これらは、テストのために、一定時間、特定量のメモリを占有します。
1.基本的なメモリ回帰スクリプト
このスクリプトを実行するには、次の手順を実行します:
$ perl memtest.pl 100
上記の例は 100 MB のメモリを占有し、入力を待ちます。単純な入力でスクリプトが終了し、メモリが解放されます。このようにして、必要なだけの時間、必要な量のメモリをこのスクリプトに占有させることができます。
最初の引数は、占有するメモリの量 (MB 単位) として取得されます。
注: 重要なシステムではこのスクリプトを実行しないでください。このスクリプトの実行中は注意してください。このスクリプトに大きなメモリ値を与えないでください。与えられたメモリの量が膨大であるか利用できない場合、システムがハングする可能性があります。
「vi memtest.pl」を実行し、次の perl コードをコピーして貼り付けて、このファイルを作成します。
# store and validate the command line parameter $mb = $ARGV[0]; unless ( defined $mb and $mb =~ /^\d+$/ and $mb >= 1) { die "Usage: $0 <occupy MB>\nEx: $0 100 - occupies 100 MB memory\n" } # convert it to bytes. $b = $mb * 1024 * 1024; # open in-memory file, and seek to size specified to get memory from OS. open MEM, '>', \$memfile; seek MEM, $b - 1, 0; print MEM 'A'; close MEM; printf "$mb MB memory is occupied, press ENTER to release: "; <STDIN>; # till here the memory is occupied by this program. undef $memfile; printf "Memory released";
2.高度なメモリ回帰スクリプト
このスクリプトを実行するには、次の手順を実行します:
$ perl memtest-adv.pl 250 (or) $ perl memtest-adv.pl 25%
この memtest-adv.pl は基本的なスクリプトと同じように機能しますが、パーセンテージを入力として指定することもできます。システムに合計 2GB の物理メモリがある場合、25% を指定できます。これは、テスト用に 500MB のメモリを占有します。
最初の引数は、MB 単位のメモリ量または占有されるメモリのパーセンテージのいずれかです。パーセンテージは、使用可能なプライマリ メモリの合計に対するパーセンテージを表します。
注: この Perl スクリプトは、指定された量のメモリをほぼ占有します。私たちがテストしたシステムでは、最大で 5MB 以上かかりました。したがって、重要なシステムではこれを使用しないでください。システムがハングする可能性があるため、このスクリプトはテスト システムでのみ使用してください。
「vi memtest-adv.pl」を実行し、次の perl コードをコピーして貼り付けて、このファイルを作成してください。
# calculate memory to be occupied from percentage given sub find_memto_occupy { $pc = $_[0]; die "Wrong percentage given $pc\n" if ($pc > 100); open MEMINFO, '<', '/proc/meminfo' or die "Unable to open /proc/meminfo to find available memory\n"; my $mem = <MEMINFO>; if ( $mem =~ /^MemTotal:\s+(\d+)\s.*$/ ) { $mem = $1; } else { die "Unable to find the available memory\n"; } $mem = ( $mem / 100 ) * $pc; return int($mem / 1024); } # main script { $num = $ARGV[0]; unless ( defined $num and $num =~ /^\d+%?$/ and $num >= 1) { die "Usage: $0 <occupy MB>\nEx: $0 100 - occupies 100 MB memory\n" } if ( $num =~ /^(\d+)%$/ ) { # convert percentage to bytes. $pc = $1; $mb = find_memto_occupy($pc); } else { $mb = $num; } $b = $mb * 1024 * 1024; open MEM, '>', \$memfile; seek MEM, $b - 1, 0; print MEM chr(0); close MEM; print "$mb MB memory is occupied, press ENTER to release: "; <STDIN>; undef $memfile; print "Memory released"; }