2017-06-15 42 views
0

私は16プロセスのPyTorchスクリプトを持っています。終了コード-9でPythonの子プロセスが突然終了する

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を検索しようとしましたが、何も役に立たなかった。誰もこれを前に満たしていますか?あるいは、これをデバッグする方法を知っていますか?申し訳ありませんが、再現性のあるコードスニペットを提供することはできません。通常、再生には1日かかるためです。そして私はpython2.7を使用しています

答えて

1

終了コード-9は、プロセスがSIGKILLで殺されたことを意味します。

おそらくマシンのメモリが不足していて、OSカーネルがOOMキラーをトリガーしていた可能性があります。

これを確認するには、dmesgでカーネルログを確認してください。OOMキラーがワーカープロセスをターゲットにしていることに気付く必要があります。

アプリケーションのメモリ占有量を減らす(またはサーバー/ワークステーションのメモリを増やす)必要があります。また、アプリケーションにメモリがリークしていないことを確認します。

+0

あなたはそうです!私はOOMが私のプロセスを殺したのを知った! –

関連する問題