用于 Linux 的内存回归 Perl 脚本

举报
Tiamo_T 发表于 2022/05/24 10:01:08 2022/05/24
【摘要】 在应用程序的性能测试期间,您可能希望执行某种内存回归测试。本文包含两个用 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。