【问题标题】:python child process exit unexpectedly with exit code -9python子进程意外退出,退出代码-9
【发布时间】:2017-06-15 20:01:24
【问题描述】:

我有一个包含 16 个进程的 PyTorch 脚本。以下是来自主进程的代码 sn-p:

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 但没有得到任何有用的东西。有没有人遇到过这个?或者您对如何调试有任何想法?很抱歉我不能提供最小的可重现代码sn-p,因为重现通常需要一天的时间。我正在使用python2.7

【问题讨论】:

    标签: python multithreading python-2.7 multiprocessing pytorch


    【解决方案1】:

    退出代码 -9 表示进程被SIGKILL 杀死。

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

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

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

    【讨论】:

    猜你喜欢
    • 2016-08-11
    • 2013-08-17
    • 1970-01-01
    • 2014-05-25
    • 2020-05-19
    • 2017-08-02
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多