私はamazon ec2でJavaプロセスを実行しています。それは72分のために走り、そして突然私は "java result 137"を得る。つまり、例外やその他のエラーメッセージはありません。私はこのエラーを検索しましたが、有用なものは何も見つかりませんでした。何が原因なのか、それを解決する方法は?私にお知らせください。Javaの結果を解決する137
9
A
答えて
22
127を超える終了コードは、通常、Signalのためにプロセスが停止したことを意味します。
終了コード137は128 + 9に解決されますが、信号9はSIGKILLです。つまり、プロセスは強制終了されました。これは、とりわけ "kill -9"コマンドである可能性があります。しかし、あなたのケースでは、これはオペレーティングシステム上のメモリー不足状態である可能性があります。そのため、「OOM Killer」という機能が原因で、大部分のメモリーを使用しているプロセスが停止し、OS自体が安定します。調子。
this questionを参照してください。
3
誰かがこの128の番号の由来を知りたいと思っている場合に備えて、その理由は、OpenJDKのソースコードに記載されています。参照:UNIXProcess_md.c
Java_java_lang_UNIXProcess_waitForProcessExit方法でのコメント:
それはすべてのUnixシェルは何をすべきかであるので、それは発信者がプロセスを区別することができますので、返却するための最良の値は、0x80を+シグナル番号です終了し、シグナルによって死を処理する。
これは、JVM開発者が、シグナルのために子供が退室したときに子供の帰国ステータスに128を追加することを決めた理由です。
私はここで、子プロセスからのステータスを返すの担当法まま:
/* Block until a child process exits and return its exit code.
Note, can only be called once for any given pid. */
JNIEXPORT jint JNICALL
Java_java_lang_UNIXProcess_waitForProcessExit(JNIEnv* env,
jobject junk,
jint pid)
{
/* We used to use waitid() on Solaris, waitpid() on Linux, but
* waitpid() is more standard, so use it on all POSIX platforms. */
int status;
/* Wait for the child process to exit. This returns immediately if
the child has already exited. */
while (waitpid(pid, &status, 0) < 0) {
switch (errno) {
case ECHILD: return 0;
case EINTR: break;
default: return -1;
}
}
if (WIFEXITED(status)) {
/*
* The child exited normally; get its exit code.
*/
return WEXITSTATUS(status);
} else if (WIFSIGNALED(status)) {
/* The child exited because of a signal.
* The best value to return is 0x80 + signal number,
* because that is what all Unix shells do, and because
* it allows callers to distinguish between process exit and
* process death by signal.
* Unfortunately, the historical behavior on Solaris is to return
* the signal number, and we preserve this for compatibility. */
#ifdef __solaris__
return WTERMSIG(status);
#else
return 0x80 + WTERMSIG(status);
#endif
} else {
/*
* Unknown exit code; pass it through.
*/
return status;
}
}
関連する問題
- 1. Javaの結果1のエラーを解決する方法
- 2. JDBC/SpringでSQL結果セットエラーを解決する
- 3. UIルートでコントローラに解決結果を渡す
- 4. JSON Bingの結果をJavaで解析する
- 5. Java xmlは特定の結果を解析しています:
- 6. mysqlの結果を解除する
- 7. JSONの結果を解析する
- 8. 春のストアドプロシージャ、結果を解析する
- 9. iOS - Facebook SDK、結果を解析する
- 10. 検索結果を解析する
- 11. Jsonチャックの解析結果
- 12. C++:エラーLNK:仮想関数の結果である未解決の外部シンボル
- 13. PHPコードのパフォーマンス結果の決定
- 14. 次の結果はどのように解決できますか?
- 15. Javaでコーデック問題を解決する
- 16. Javaアップキャストスコープ解決の問題
- 17. 逆コンパイルされたJavaクラスの結果コードを解釈する問題:MyType.access $ 102
- 18. 解析REST API結果パイソン
- 19. Java 7の結果セットを閉じる
- 20. java:ページング結果のデザインパターン
- 21. 名前解決は、Java
- 22. Sybaseの更新テーブルの中で結論を解決する
- 23. Javaのループを介して解決
- 24. `SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST`の結果の理解
- 25. Weakerの多層パーセプトロンモデリング結果の解釈
- 26. Web Audio APIのFFT結果の解釈
- 27. XCode AddressSanitizerの結果の解釈
- 28. のiOS 5 JSONの解析結果3840
- 29. C/C++結合ファイルのエラーを解決する
- 30. いくつかの関数の結果で解決する約束を返すには?
あなたはどのようなプロセスを実行しているの?たぶんそれは処理が終了したちょうど状態です。エラーではない可能性があります。 –
"Java result"の後の数字は、コードが実行を終了するときにSystem.exit(int)に渡される値であると考えています。通常、慣例では、ゼロ以外の終了コードはエラーを示していますが、状況をデバッグするのに役立つエラーメッセージがないという貧弱な形式です。 – Bobulous
@KevinMangoldクラスタ上のMongoDBにレコードを挿入しています。 4台のマシンに4つのシャードがあり、このJavaプロセスはMongoS(シャードに文書を転送するもの)に接続することによって文書を挿入します。私のコードでは、System.exit()を使用しますが、エラー条件が満たされたときに明示的に-1を返します。 amazon-ec2にもタグをつけていただきありがとうございます。投稿しているうちに完了しているはずです。 – Raghava