2017-06-15 205 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殺了我的過程! –