0

Amazon EC2 Ubuntu インスタンスで同じ python スクリプトの複数のコピーを実行しています。各コピーは、ここで提案されているソリューションを使用して、同じ子 Python スクリプトを順番に起動します

ときどき、これらの子プロセスの一部が停止します。subprocess.check_output例外をスローし、エラー コードを返します-9。子プロセスをプロンプトから直接実行しましたが、しばらく実行した後、プロセスはそれほど詳細ではないメッセージで終了しますKilled

質問:

  • とは-9どういう意味ですか?
  • 何がうまくいかなかったのかを知るにはどうすればよいですか? 具体的には、同時に実行されている同じスクリプトの複数のコピーによってマシンが過負荷になっていることが原因ではないかと疑っています。同時に、私が直接実行した特定の子プロセスは、起動されるたびに、直接かどうかに関係なく、多かれ少なかれ同時に (つまり、多かれ少なかれ同じ量の入力データを処理した後) 停止しているように見えます。Python はエラー メッセージを生成しません。
  • Python コードにバグがないと仮定すると、クラッシュを防ぐにはどうすればよいでしょうか?
4

2 に答える 2

1

check_output()サブプロセスからの出力をメモリに蓄積します。プロセスが十分な出力を生成する場合、大量の RAM を消費するため、oom killerによって強制終了される可能性があります。

出力が必要ない場合は、check_call()代わりに使用して出力を破棄できます。

import os
from subprocess import check_call, STDOUT

DEVNULL = open(os.devnull, "r+b")

check_call([command], stdout=DEVNULL, stderr=STDOUT)
于 2013-05-11T03:38:09.630 に答える
0

-9 は、キャッチ可能または無視できないシグナルを殺すか、すぐに終了することを意味します。

たとえば、プロセスを強制終了しようとしている場合は、ターミナルに次のように入力できます。

ps aux | grep processname

またはこれだけで、すべてのプロセスのリストを取得できます。ps aux

終了したいプロセスの pid を取得したら、kill -9 の後に pid を入力します。

kill -9 1234 

ログに関しては、私の記憶は少しぼやけていますが、/var/log/ を探し回って、何かが見つかるかどうか、または dmesg を確認します。

Python コードのクラッシュを防ぐ限り、例外処理を試しましたか?

Python の例外

于 2012-12-12T20:55:22.900 に答える