私は、毎分データベースをチェックして、特定のウェブサイトを監視する必要があるかどうかを確認するJavaプログラムを持っています。それが条件を満たしていれば、私はProcessBuilderを使って他のJavaプログラム(runnable jar)にWebサイトのURLを渡します...そして、私が期待するようにWebサイトを監視します。メインJavaプログラムからモニタを蹴る
しかし、これは膨大なメモリリークを引き起こしているようです。少数のウェブサイトしか監視されていなくても、「Java Out of Memory Exception」が発生するようです... JAR内からJARを呼び出すよりも、これを行うより良い方法があるのだろうかと思います。
これは、私は現在、ウェブサイトのモニターをキックオフする方法である:
if(URL.length() > 1) {
ProcessBuilder builder = new ProcessBuilder("java", "-jar", "/usr/opt/monitor/Monitor.jar", URL);
builder.redirectErrorStream(true);
builder.redirectOutput(new File("/usr/opt/logs/Monitor.log"));
Process p = builder.start();
誰もがこれをしてください達成するためのより良い方法を提案してくださいことはできますか?スレッディング? Monitor.jarから直接クラスを呼び出しますか?
まず、メモリリークの原因を見つける必要があります。そしてそれを修正しようとするだけです。 – talex
あなたの要件の1つが別々のアプリケーションを持つことである場合、Webサイトを監視する必要があるたびにメッセージを公開するJMSキューを使用し、このキューに別のアプリケーションを登録してスレッドを作成する受信したメッセージごとに(監視ロジックを使用して)送信されます。 – Maaaatt
各プロセスには独自のメモリ領域があるため、どのプロセスがメモリ不足の原因であるかを確認し、そのアプリケーションを分析する必要があります。また、監視プロセスの開始方法とは関係がないと思います。 – OTM