【问题标题】:Computing system memory in use in PerlPerl 中使用的计算系统内存
【发布时间】: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


【解决方案1】:

如果您试图分配或重新分配一个巨大的字符串、数组或散列,它可能会请求比系统可用的更大的内存块。虽然您有 4 GB 的实际内存和 4 GB 的虚拟内存,但其他进程可能已经消耗了其中的很大一部分。

或者,您的系统可能有一个每个进程的内存限制,可能是 2 gig。

最后,您的操作系统可能是 64 位的,但您的 Perl 可能是 32 位的。在这种情况下,它可以处理的最大内存量为 2 gig。如果您将perl -V 的副本发布到我们可以查看的地方,我们也许可以解决这个问题。

【讨论】:

  • 请在此处查看perl -V 的输出pastebin.com/mvF7YgKH 也在更新问题。 perl 运行时,我没有运行任何其他繁重的进程。浏览器、文本编辑器等都关闭了。
  • @user13107,这看起来像是 32 位版本的 Perl。这可能是因为您可能没有安装 64 位版本,或者您需要将问题分解为更小的部分。
  • @titanofold 是的,现在安装 Strawberry perl 64 位(不卸载 perl 32 位)。它会与已安装的 perl 模块产生问题吗?我是否必须重新安装从 cpan 安装的所有附加模块?谢谢。
  • @user13107 是的,你必须重新安装你的模块。如果它们不是纯 Perl 程序,它们可能已被编译为 32 位库或程序。
  • @titanofold 不幸的是,64 位 perl 没有帮助。该程序仍然在Memory usage: 1916203008 退出(与以前大致相同)。我可能会错过什么?我使用了 C:\strawberry64\perl\bin 中存在的另一个 perl 可执行文件
【解决方案2】:

您有 32 位 Perl。 Windows 不能为 32 位进程分配超过 2GB 或内存也就不足为奇了。如果您安装 64 位 Perl,这应该在物理 RAM 上达到最大值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 2017-06-30
    • 1970-01-01
    相关资源
    最近更新 更多