gpt4 book ai didi

Perl 内存使用分析和泄漏检测?

转载 作者:行者123 更新时间:2023-12-03 08:41:27 26 4
gpt4 key购买 nike

我用 Perl 编写了一个在 Linux 上运行的持久网络服务。

不幸的是,当它运行时,它的驻留堆栈大小 (RSS) 只会增长,增长,增长,缓慢而稳定。

尽管我努力消除所有不需要的哈希键并删除对对象的所有引用,否则这些引用会导致引用计数保持在原位并阻碍垃圾收集。

是否有任何好的工具可以分析与 Perl 程序中的各种 native 数据原语、祝福哈希引用对象等相关的内存使用情况?你用什么来追踪内存泄漏?

我不习惯在 Perl 调试器或任何各种交互式分析器中花费时间,因此我会很感激热情、温和、不深奥的回应。 :-)

最佳答案

您可以在其中一个对象中有循环引用。当垃圾收集器来释放这个对象时,循环引用意味着该引用所引用的所有内容都不会被释放。您可以使用 Devel::Cycle 检查循环引用和 Test::Memory::Cycle .要尝试的一件事(尽管它在生产代码中可能会变得昂贵,所以当未设置调试标志时我会禁用它)是检查析构函数内的所有对象的循环引用:

# make this be the parent class for all objects you want to check;
# or alternatively, stuff this into the UNIVERSAL class's destructor
package My::Parent;
use strict;
use warnings;
use Devel::Cycle; # exports find_cycle() by default

sub DESTROY
{
my $this = shift;

# callback will be called for every cycle found
find_cycle($this, sub {
my $path = shift;
foreach (@$path)
{
my ($type,$index,$ref,$value) = @$_;
print STDERR "Circular reference found while destroying object of type " .
ref($this) . "! reftype: $type\n";
# print other diagnostics if needed; see docs for find_cycle()
}
});

# perhaps add code to weaken any circular references found,
# so that destructor can Do The Right Thing
}

关于Perl 内存使用分析和泄漏检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1359771/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com