小编win*_*old的帖子

使用 IO::Socket::Async 的内存泄漏(?)(在 FreeBSD 13.1 上)

在 raku (v2022.07) 应用程序中处理日志流(通过 UDP)时,我使用 IO::Socket::Async 遇到了内存泄漏问题。
我将代码提取到一个更简单的程序中,如下所示(〜与https://docs.raku.org/type/IO::Socket::Async中的代码相同):

#!/usr/bin/env raku
#
my $socket = IO::Socket::Async.bind-udp('localhost', 24225);
react {
    whenever $socket.Supply -> $v {
        print $v if $v.chars > 0;
    };
};
Run Code Online (Sandbox Code Playgroud)

它泄漏了大量的内存 - 我让它运行大约 12 小时,当我检查时 - 仍在运行(在 1T 内存机器上) - 使用 ps auwwx [pid]

它显示 VSZ 和 RSS 为 314974456 和 20739784(因此,v 大小大约为 300G,驻留数量为 20G)。

[顺便说一句,UDP 流量相当轻 - 平均每秒 350 个(约 100 字节)数据包(峰值达到约 1000 个/秒)]

所以..我在perl5中重写了上面的内容(在类似的泄漏结果和几个raku变体之后),它很快稳定在大约8M驻留-这很好/稳定/等等。- 但我更喜欢这个进程来提供 raku 通道(没有单独的 perl 进程/文件尾部等)。

我的环境:FreeBSD 13.1-RELEASE-p2 GENERIC amd64 和 raku:v2022.07 …

sockets memory-leaks raku

8
推荐指数
1
解决办法
168
查看次数

自动加载调用通过 Raku 中的 Inline::Perl5 失败

我正在 Raku 中重写一些 perl/图表软件,但通过 Inline::Perl5 使用 ChartDirector perl5 模块(下面的链接)遇到了问题。该模块基本上是 DLL 的 Perl 接口;通过 Inline::Perl5 使用模块似乎适用于代码中显式包含的方法调用 - 但大多数方法调用是通过 perl5 中的自动加载“捕获所有”机制执行的。这些在我的 raku 代码中不起作用。

我的问题是我可以期望这种应用程序使用 Inline::Perl5 工作吗?(也许没有办法“捕获”这些自动加载的方法调用),如果是这样,如何做到这一点。

感谢您的任何指点、建议。

工作组


ChartDirector 软件(优秀的图形/图表软件 - 已经使用 Perl 近 20 年了): https: //www.advsofteng.com/index.html


引用有关此内容的 Chartdir 论坛线程开头的措辞(简化的)、版本信息和代码:

我正在使用Inline::Perl5它,它可以与我尝试过的所有其他模块一起使用。

我在复制Chartdir 站点上的“第一个项目”示例时遇到问题。

使用chartdir 6、freebsd 12.2(intel平台)、raku 2022.04、perl 5.32.1。

#!/usr/bin/env raku

use lib:from<Perl5>  '/usr/local/lib/perl5/site_perl';
use Inline::Perl5;

my $p5 = Inline::Perl5.new;
$p5.use('perlchartdir') ;

my $data = [85, 156, 179.5, 211, 123];
my $labels = ["Mon", "Tue", "Wed", "Thu", "Fri"]; …
Run Code Online (Sandbox Code Playgroud)

perl chart-director raku

7
推荐指数
1
解决办法
174
查看次数

标签 统计

raku ×2

chart-director ×1

memory-leaks ×1

perl ×1

sockets ×1