【发布时间】:2012-11-03 18:53:24
【问题描述】:
我按照最佳答案here, see below for code 获取在我的 perl 代码中的给定行使用的系统内存。我正在运行 Windows 7 Home Basic、64 位、4 GB 内存、4.06 GB 虚拟内存(在我的计算机下的高级系统设置下指定)。在 perl Out of Memory 之前,我在一行中收到了 perl 的以下消息。
内存使用:1916346368
假设这个数字以字节为单位(= 1.78 GB),为什么 perl 会出现内存不足?如何获取所有进程的系统总内存使用量?
计算内存的代码块如下。我正在使用草莓 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 占用更多内存。
【问题讨论】:
-
Perl 内存不足时在做什么?
-
@Schwern 它正在将文件读入几个 3D 散列。
-
@user13107,我们需要查看源代码中内存不足的相关部分。
-
@titanofold,我会在几个小时后回来。谢谢。
-
更新:问题已通过 64 位 perl 解决。但我也注意到该程序在 Ubuntu 上运行 32 位 perl 时没有任何障碍。因此,Windows 上的 Strawberry perl 可能比 Ubuntu 上的 perl 占用更多内存。
标签: perl memory windows-7 virtual-memory strawberry-perl