用于 Linux 的内存回归 Perl 脚本
【摘要】 在应用程序的性能测试期间,您可能希望执行某种内存回归测试。本文包含两个用 perl 编写的内存回归脚本,它们将在一定时间内占用特定数量的内存,供您测试。
在应用程序的性能测试期间,您可能希望执行某种内存回归测试。本文包含两个用 perl 编写的内存回归脚本,它们将在一定时间内占用特定数量的内存,供您测试。
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";
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)