私は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. DNSでPycurlの結果を解決する
- 3. JDBC/SpringでSQL結果セットエラーを解決する
- 4. Apache Tomcat 8.0.41でデプロイメントが失敗する未解決の結果
- 5. 角度ルータで別の解決結果を渡す
- 6. UIルートでコントローラに解決結果を渡す
- 7. JSON Bingの結果をJavaで解析する
- 8. NodejsのJSON結果を解析するmssqlの結果
- 9. Javaでの内部結合の解析結果[パフォーマンス関連]
- 10. スパークランダムフォレストの特徴理解結果結果
- 11. コンテンツモデレータ、偽陽性結果の解決方法
- 12. Java 8でJAVA FATAL ERRORを解決する解決策はありますか?
- 13. Java xmlは特定の結果を解析しています:
- 14. Javaのジェネリックエラーを解決する方法
- 15. curl_exec()の結果を解析するPHP
- 16. mysqlの結果を解除する
- 17. JSONの結果を解析する
- 18. 春のストアドプロシージャ、結果を解析する
- 19. DeepDiffの結果を解析する
- 20. Javaでフォーマットする結果
- 21. は期待し、代わりに解決した結果
- 22. のJava - クエリ結果
- 23. Javaでコーデック問題を解決する
- 24. Selenium Javaでウェブロケータを解決する
- 25. イオンビルドエラーコード137
- 26. ARIMAの結果の解釈
- 27. VARselect()の結果の解釈
- 28. 検索結果を解析する
- 29. iOS - Facebook SDK、結果を解析する
- 30. 結果を解析し集計する
あなたはどのようなプロセスを実行しているの?たぶんそれは処理が終了したちょうど状態です。エラーではない可能性があります。 –
"Java result"の後の数字は、コードが実行を終了するときにSystem.exit(int)に渡される値であると考えています。通常、慣例では、ゼロ以外の終了コードはエラーを示していますが、状況をデバッグするのに役立つエラーメッセージがないという貧弱な形式です。 – Bobulous
@KevinMangoldクラスタ上のMongoDBにレコードを挿入しています。 4台のマシンに4つのシャードがあり、このJavaプロセスはMongoS(シャードに文書を転送するもの)に接続することによって文書を挿入します。私のコードでは、System.exit()を使用しますが、エラー条件が満たされたときに明示的に-1を返します。 amazon-ec2にもタグをつけていただきありがとうございます。投稿しているうちに完了しているはずです。 – Raghava