2017-06-15 157 views
0

我有一个PyTorch脚本16进程。以下是从主要处理的代码片段:python子进程退出意外退出代码-9

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

退出代码-9意味着进程通过SIGKILL被终止。

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

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

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

+0

你说得对!我确实发现OOM杀了我的过程! –