0

ここで一番の答えに従いました。perlコードの特定の行で使用されているシステムメモリを取得するコードについては、以下を参照してください。Windows 7 Home Basic、64 ビット、4 GB RAM、4.06 GB 仮想メモリ ( [マイ コンピューター]の詳細システム設定で指定) を実行しています。perl がOut of Memoryになる前に、perl から次のメッセージを一行で受け取りました。

メモリ使用量: 1916346368

この数値がバイト単位 (= 1.78 GB) であると仮定すると、なぜ perl はメモリ不足になったのでしょうか? すべてのプロセスによるシステムの合計メモリ使用量を取得するにはどうすればよいですか?

メモリを計算するコード ブロックは次のとおりです。Strawberry Perl 5.12.3.0 を使用しています

use Win32::OLE qw/in/;

sub memory_usage() {
    my $objWMI = Win32::OLE->GetObject('winmgmts:\\\\.\\root\\cimv2');
    my $processes = $objWMI->ExecQuery("select * from Win32_Process where ProcessId=$$");

    foreach my $proc (in($processes)) {
        return $proc->{WorkingSetSize};
    }
}

print 'Memory usage: ', memory_usage(), "\n";

Perl -V は次の情報を提供します http://pastebin.com/mvF7YgKH

更新:問題は 64 ビット perl で解決されました。しかし、プログラムが Ubuntu の 32 ビット perl でヒッチなしで実行されたことにも気付きました。したがって、Windows の Strawberry perl は、Ubuntu の perl よりも多くのメモリを消費する可能性があります。

4

2 に答える 2

3

巨大な文字列、配列、またはハッシュを割り当てたり、再割り当てしようとした場合、システムから利用できるよりも大きなメモリ ブロックが要求された可能性があります。4 ギガの実メモリと 4 ギガの仮想メモリがありますが、他のプロセスがその大部分を消費している可能性があります。

または、システムのプロセスあたりのメモリ制限が 2 GB になる場合があります。

最後に、OS は 64 ビットかもしれませんが、Perl は 32 ビットかもしれません。その場合、アドレス指定できるメモリの最大量は 2 ギガになります。私たちが見ることができる場所のコピーを投稿していただければ、perl -V解決できるかもしれません。

于 2012-11-03T19:47:41.883 に答える
0

32 ビット Perl を使用しています。Windows が 2GB またはメモリを 32 ビット プロセスに割り当てることができないのは当然のことです。64 ビットの Perl をインストールすると、これは物理 RAM で最大になるはずです。

于 2012-11-03T22:24:36.427 に答える