并行Python-C ++程序冻结(内存?)

时间:2018-05-12 13:58:13

标签: python c++ memory server freeze

我有一个包含C ++核心python的python程序。它是并行编写的,因为它在计算上非常昂贵,而且我目前正在Ubuntu 16.04平台上远程服务器上运行它。

我遇到的问题是,对于我的测试用例,在一定数量的周期(比如2000)中,它会突然冻结,而不会给出错误消息或任何内容。我检测到它停止的代码部分,并且是一个python函数,它没有任何循环功能(因此我假设它没有陷入循环)。我试图简单地评论它在代码中被卡住的功能,因为它进行了微小的计算,现在,在完全相同的周期数下,它会稍微提前一点,这次是在C ++编写的部分内部。我开始假设可能存在与服务器相关的内存问题。

当代码卡住时从终端执行htop我可以看到计算中涉及的单位已完全加载,因为它们当前涉及一些未知的计算。此外,该过程中涉及的内存(至少在进程已经卡住时)没有被完全占用,因此它也可能不是RAM问题。

我还试图大幅减少每个周期写入的输出数量(我承认,大小一致),但没有。使用最佳处理器数量需要20分钟才能达到2000个循环的临界点,因此问题不易重现。

这是我第一次遇到这类问题,我还能做些什么来强调这个问题吗?

感谢您的回答

1 个答案:

答案 0 :(得分:1)

这是你可以尝试的东西。 编写一个代码来检查正在进行的迭代,并在第2000次迭代开始时存储所有变量。

然后使用相同的变量集再次运行迭代。 它不会解决您的问题,但它将有助于缩短测试时间,从而缩短您查找问题所需的时间。

如果它肯定是一个内存问题,代码将不会卡在2000(那是你开始的地方),但会陷入4000。

然后你可以在第2000次迭代时监视内存并复制它。