我应该使用哪个工具来查找Perl中的内存分配?

Col*_*ell 6 perl memory-leaks memory-management

我使用File :: Slurp在一个大文件中啜饮但是考虑到文件的大小,我可以看到我必须在内存中使用它两次,或者可能因为变成16位unicode而膨胀.我怎样才能最好地诊断Perl中的那种问题?

我输入的文件大小为800mb,我的perl进程正在分析该数据在运行时分配的大约1.6gb.

我意识到我对这个问题的理由可能是错的,但我不确定证明/反驳我的理论的最有效方法.

更新:

我从嫌疑人名单中删除了狡猾的字符编码.看起来我在某个时候复制变量,我只是无法弄清楚在哪里.

更新2:

我现在已经做了一些调查,发现它实际上只是从File :: Slurp获取导致问题的数据.我查看了文档,发现我可以让它返回一个scalar_ref,即

my $data = read_file($file, binmode => ':raw', scalar_ref => 1);
Run Code Online (Sandbox Code Playgroud)

然后我没有得到记忆的膨胀.在我的情况下获取数据时,这是有道理的并且是最合理的事情.

关于查看存在哪些变量等信息通常有帮助,但感谢.

Htb*_*baa 4

也许Devel::DumpSizes和/或Devel::Size可以帮忙?我认为前者对你的情况更有用。

Devel::DumpSizes - 转储脚本中给定点可用的变量的名称和大小(以字节为单位)(按升序排列)。

Devel::Size - Perl 扩展,用于查找 Perl 变量的内存使用情况