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);
然后我没有得到记忆的膨胀.在我的情况下获取数据时,这是有道理的并且是最合理的事情.
关于查看存在哪些变量等信息通常有帮助,但感谢.
也许Devel::DumpSizes和/或Devel::Size可以帮忙?我认为前者对你的情况更有用。
Devel::DumpSizes - 转储脚本中给定点可用的变量的名称和大小(以字节为单位)(按升序排列)。
Devel::Size - Perl 扩展,用于查找 Perl 变量的内存使用情况