python 子进程意外退出,退出代码为 -9
python child process exit unexpectedly with exit code -9
我有一个包含 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
退出代码 -9 表示进程已通过 SIGKILL
终止。
这可能是由于您的机器 运行 内存不足并且 OS 内核触发了 OOM 杀手。
要验证这一点,请通过 dmesg
检查内核日志,您应该注意到针对您的工作进程的 OOM 杀手。
您需要减少应用程序的内存占用(或增加 server/workstation 的内存)。还要验证您的应用程序没有泄漏内存。
我有一个包含 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
退出代码 -9 表示进程已通过 SIGKILL
终止。
这可能是由于您的机器 运行 内存不足并且 OS 内核触发了 OOM 杀手。
要验证这一点,请通过 dmesg
检查内核日志,您应该注意到针对您的工作进程的 OOM 杀手。
您需要减少应用程序的内存占用(或增加 server/workstation 的内存)。还要验证您的应用程序没有泄漏内存。