Linuxで実行可能なjarファイルを自動再起動するにはどうすればよいですか。
別の画面でLinuxVPSでjarを実行していますが、OUTOFMEMORYERRORJavaヒープスペースが原因でしばらくすると停止します。
Linuxで実行可能なjarファイルを自動再起動するにはどうすればよいですか。
別の画面でLinuxVPSでjarを実行していますが、OUTOFMEMORYERRORJavaヒープスペースが原因でしばらくすると停止します。
これを試してみてください: -XX:OnOutOfMemoryError="<cmd args>; <cmd args>"
"kill -TERM pid" を実行するシェル スクリプトを作成し、それを再度開始してcmd
、コマンド ライン オプションの一部にスクリプトを挿入します。多かれ少なかれそれだけですが、プロセスの pid を知る必要があります (または killall や ps などに依存します)。
また、monitを使用して、アプリケーションが実行されているかどうかを定期的に確認することもできます。多かれ少なかれ、これらは標準的なソリューションです。私自身、監視デーモンを使用して、メモリが少なくなったときに電子メール/SMSで通知し、適切な検査を行い、修正が必要なリークがあるかどうかを確認します。数十GBのヒープがある場合、ヒープをぶっきらぼうにダンプするのは最悪です。
アプリケーションがダウンしたら再起動する簡単なランチャーを作成します。このようなもの:
#!/bin/sh
TEMPFILE=`mktemp`
while true ; do
echo "`date` Starting application" >> $TEMPFILE
java -XX:OnOutOfMemoryError="kill -9 %p" -jar application.jar
sleep 5
done
VM が正しく実行されるようにするために、メイン ループについて次のことを考慮する必要があります。
try {
// main loop
businessLogic();
} catch (OutOfMemoryError E) {
System.exit(1);
}
編集: 私は個人的にJava Service Wrapperを使用して、アプリケーションの再デプロイが多すぎるとメモリ リークが発生して失敗する apache tomcat を再起動することに成功しました。あなたはそれを見たいと思うかもしれません、それはかなり簡単です。
jvmにより多くのメモリを割り当てようとしましたか? それでも問題が解決しない場合は、シャットダウン フックを関連付けることができますが、常に実行されるという保証はありません。そこから他のプロセスを呼び出して、少し遅れてプログラムを再び開始することができます