2

localhost でバックエンド サーバー アプリケーションとして実行されている Java アプリケーション (jar) がいくつかあります。これらのプログラムは、仮想ボックス (RHEL 6.2) 内にあります。
jar の 1 つが 5 日間実行された後、機能しなくなりました。例外はスローされませんでした (catch ブロックでキャッチできるエラーの出力は見られませんでした)。この原因を突き止めるために、シェルスクリプトを使用してコマンドラインで演算子をprintln's使用して、出力をテキスト ファイルにリダイレクトしました。 約 4 ~ 5 日後、jar がまだ実行されていることを確認できる状況に直面しましたが、テキスト ファイルまたはアプリケーションがエントリを書き込むデータベースには何も出力していませんでした。 テキストファイルが大きすぎて仮想ボックスが処理できなくなった可能性がありますが、基本的には次のことを知りたかったのです。 >

このような実行時の問題は、Java ではどのように発生するのでしょうか? C++ には valgrind や Purify などが
ありますが、1. Java にそのようなツールはありますか?
2. 非常に大きなテキストファイルの問題に直面せずに println を出力するには、どのようにお勧めしますか? または、それを行うより良い方法はありますか?

4

2 に答える 2

1

System.out に出力するのではなく、log4j などのツールを使用するのはどうですか。Log4J では、ログファイルのサイジング、バージョン管理、パージが可能です。

http://logging.apache.org/log4j/1.2/を参照

また、サーバー アーキテクチャを再検討することもできます。

于 2013-08-27T06:21:03.447 に答える
1

このような実行時の問題は、Java ではどのように発生するのでしょうか? C++ には valgrind や Purify などがありますが、1. Java にそのようなツールはありますか?

利用可能な Java プロファイラーはたくさんありますが、無料のものはほとんどありません。Javaディストリビューションに付属するVisualVMと呼ばれるものがあります。プロファイラーを使用してプロセスをアタッチできますが、プロファイラーは、メモリ リーク、CPU を集中的に使用するタスクなどのいくつかの問題を見つけるのに役立ちます。

  1. 非常に大きなテキストファイルの問題に直面せずにprintlnを出力することをどのように勧めますか? または、それを行うより良い方法はありますか?

Sysout は、この問題に対処する良い方法ではありません。log4j などのロガーは、非常に堅牢で使いやすい API を提供します。Log4j は、ログ ファイルなどの機能をロールオーバーするように構成する簡単な方法も提供します。

于 2013-08-27T06:21:29.600 に答える