我在Perl上编写了一个在Linux上运行的持久网络服务.
不幸的是,随着它的运行,它的Resident Stack Size(RSS)只是在缓慢但肯定地增长,增长和增长.
尽管我努力消除所有不需要的哈希键并删除对象的所有引用,否则会导致引用计数保留在原位并阻碍垃圾收集.
是否有任何好的工具可以在Perl程序中分析与各种本机数据原语,祝福散列引用对象等相关的内存使用情况?你用什么来追踪内存泄漏?
我不习惯在Perl调试器或任何各种交互式分析器中花费时间,因此我们将感激温暖,温和,非深奥的反应.:-)
我有一个Perl脚本,我使用哈希表维护一个非常简单的缓存.一旦占用超过n个字节,我想清除散列,以避免Perl(32位)耗尽内存并崩溃.
我可以检查键值对的数量:
if (scalar keys %cache > $maxSize)
{
%cache = ();
}
Run Code Online (Sandbox Code Playgroud)
但是有可能检查哈希占用的实际内存吗?
我希望让我的Perl程序使用多个核心.它逐步读取查询输入,并将其中的块与每个运行的从文件加载的只读数据结构进行比较.该数据结构通常是几千兆字节,是一小组压缩字符串,用于小型C例程.当进程被分叉时,所有内容都被复制,这在多核计算机上快速打开RAM.我尝试了几个非标准模块,但都会导致速度变慢和/或破坏RAM.我认为,对于只读数据,Perl不会坚持要复制.其他语言可以做到.有人有想法吗?
在我的Perl脚本中,它以高占用内存的累积速度运行.我已经尝试在不再需要时立即清除可疑变量,但问题无法解决.是否有任何方法可以在执行块之前和之后监视内存占用的变化?
我编写了一个perl程序来操作庞大的数据集.我试图在其内存使用方面描述其执行情况.尝试在小数据集上使用valgrind,但它会大大减慢执行速度.我正在寻找只是堆分析.你们能提出一些建议吗?