2011-09-16 15 views
6

私は24/7を実行したいが、ときどきクラッシュするプログラムを持っている問題を抱えている。通常、これは問題ではないでしょう。なぜなら、クラッシュしているかどうかをチェックし、必要に応じてプロセスウォッチャーを再起動するプロセスウォッチャーを作成することができるからです。別の実行中のJavaアプリケーションから例外をキャッチ

しかし、この特定のプログラムでは例外がスローされ、統合されたグラフィカルインターフェイスに出力されることがあります。この例では、プログラムはまったくクラッシュしません。インターフェイスは稼働していますが、実際のサーバー機能は使用できません。

このプロセスからこの情報を傍受する方法はありますか?

+0

使用しているOSは何ですか? – Windle

+0

このアプリのソースコードにアクセスできますか?もしそうなら、あなたはそれを変更できますか? – aav

+0

@Windle:これはWindows 7で動作していますが、Linuxでも同様に簡単に実行できます。私はWindows用のソリューションを好むだろう。 –

答えて

4

Java Virtual Machine Tools Interfaceを使用します。私はあなたの例外をキャッチするコードを与えることはできませんが、これはどこに見えるかです。あなたは、例外をスローするクラスを見つけるためにいくつかの探偵的な作業を行うか、少なくともスローされたインジケータを見つける必要があります。

編集:方法を知っているかどうかをベンダーに問い合わせてみることもできます。また、ログファイルに例外を書き込んでいるかどうかを調べることもできます。

+0

私はこれを見ていきます。私はそれが投げている特定の例外を知っている、それはGUIに詳細にそれを投げているので。私はこの1つの例外を本当に懸念しています。なぜなら、サーバーは何も処理していないからです。 –

1

他のプログラムはJavaですか? AspectJを見ると、プログラムの起動を制御している場合は、何かをハックすることができるかもしれません。

+0

私は実行可能な実行可能ファイルしか持っていません。これはまだ可能でしょうか? –

+1

AspectJはJava上でのみ動作します。これがWindows実行ファイルの場合は、おそらくウィンドウタイトルを調べてkillしてからプロセスを再起動する必要があります。 –

+0

私はそうしますが、それはそのようには機能しません。これは、タイトルではなくインターフェイスのテキストボックスに出力されます。 –

2

あなたはソースコードにアクセスできないと思うので、GUIに出力している場合、答えはいいえです。実行中のプロセスにアタッチすることができたとしても、例外を傍受する必要がありますが、アプリケーションからスローされずにGUIにキャッチされて送信されます。

理論上、アプリケーションをスクレイプすることができます。私はこれを行うための特定のツールを知らないが、そこにいる可能性があります。

編集:私は間違っている可能性があります。実行中のスレッドからスタックを取得する投稿hereをチェックしてください。このように例外をキャプチャすることはできませんが、例外がスローされたときと比較してプログラムが正常に動作している場合、スタックトレースは非常に異なって見えます。

編集2:2番目に正確な回答を提出しました。下記参照。

+0

私の推測ではこれが最善のルートです。それがSystem.err/outに出力された場合は、たくさんの出力が表示され、プロセスを強制終了(作成されたGUI要素を削除)することができます。 –

1

大量のハッキングを行わない限り、アプリを再構築する機能がないと、通常は運が悪くなります。ここに私が考えることができる1つのオプションがあります。

ほとんどの場合、アプリケーションはSystem.outおよび/またはSystem.errを独自のストリーム実装で置き換えます。その場合、このストリームのクラスを探して、同じ名前の独自のラッパーに置き換えることができます。 jarjarを使用して元のクラスの名前を変更できます。あなたは例外を検出するコンソール出力を提供することができます。

+0

Javaプログラムで実行可能ファイルがある場合、ラップされている可能性があります。 Launch4Jをチェックしてください。彼らが使ったことはかなり良いチャンスです。瓶を取り出すことは不可能ではないかもしれません(免許を別にしてください)。 –

2

これは機能する場合もありませんが、アプリケーションがエラーを表示してサーバーが動作を停止した場合、メモリ使用量が低下しますか?そうであれば、ウィンドウ・コマンドtasklistを呼び出すためにプロセス・モニターにロジックを追加して、メモリー使用量があるしきい値を下回るかどうかを確認することができます。あなたは、プログラムが通常どれくらいのメモリを使用しているか、エラーの後にどのくらい使用するかをチェックする必要があります。

サーバの機能が動作しなくなったと言われたので、基本的にサーバにpingを実行して、それがまだ稼働しているかどうかを確認する簡単なプログラムを書くこともできます。そうでない場合は、プロセスを終了して再起動します。

関連する問題