gpt4 book ai didi

linux - 当大型父进程的子分支关闭时,如何防止 Perl 消耗大量内存?

转载 作者:IT王子 更新时间:2023-10-29 00:18:44 26 4
gpt4 key购买 nike

上下文:

我有一个在 Linux 上运行的多分支 Perl (5.16) 进程。父分支加载了大量的 Perl 代码(通过 use/require)并分配了大量的数据结构(几 GB)。然后它会创建许多子 fork ,所有子 fork 都并行工作。这样做是为了减少进程运行时的内存占用,因为 fork() 的写时复制特性意味着子进程可以使用父进程拥有的数据,而无需各自维护自己的数据自己的大内存图像。

问题:

在我尝试关闭这组进程之前,所有这些都工作正常。当我中断父进程(信号传播到所有子进程)时,运行代码的服务器上的内存立即填满,它开始交换,服务器上的其他进程逐渐停止。当写时复制分支关闭时,Perl 似乎正在尝试重新分配父级中声明的所有内存,以便它可以将其标记为 free 或其他东西。

问题:

如何防止这种关机时膨胀的情况发生?有什么方法可以告诉子叉只尝试遍历和回收那些叉分配的内存吗?

最佳答案

内存页的分配是由于退出时变量的释放。这是调用析构函数所必需的。

调用 POSIX::_exit() 将立即退出,跳过每个变量的释放,也跳过析构函数的调用。

关于linux - 当大型父进程的子分支关闭时,如何防止 Perl 消耗大量内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29126815/

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