python子进程意外退出退出代码-9

时间:2017-06-15 20:01:24

标签: python multithreading python-2.7 multiprocessing pytorch

我有一个包含16个进程的PyTorch脚本。以下是主要流程的代码段:

procs = [mp.Process(target=self.worker_wrapper, args=(i, )) for i in range(self.n_workers)]
for p in procs: p.start()
while True:
    time.sleep(60)
    for i, p in enumerate(procs):
        self.logger.info('Check: id %d, exitcode %s, alive %s' % (
            i, str(p.exitcode), str(p.is_alive())))

worker_wrapper就是这样:

def worker_wrapper(self, id):
    try:
        self.worker(id)
    except Exception as e:
        self.logger.info(e)
        self.logger.error(traceback.format_exc())

worker会做一些事情,永远不会停止。它在开始时运行良好,但通常在运行1天后,一些子进程(并非所有进程)意外退出,我得到如下输出:

[2017-06-15 08:45:21,540] Check: id 13, exitcode -9, alive False

它没有发现任何异常。我试图搜索exitcode -9但没有得到任何有用的东西。有没有人见过这个?或者你对如何调试它有任何想法?对不起,我无法提供最小的可重现代码片段,因为它通常需要一天时间才能重现。我正在使用python2.7

1 个答案:

答案 0 :(得分:1)

退出代码-9表示该进程已通过SIGKILL被终止。

这可能是由于您的计算机内存不足而操作系统内核触发了OOM杀手。

要验证这一点,请通过dmesg检查内核日志,您应该注意到针对您的工作进程的OOM杀手。

您需要减少应用程序的内存占用(或增加服务器/工作站的内存)。还要验证您的应用程序没有泄漏内存。