Ich habe ein Java-Programm, das jede Minute eine Datenbank überprüft, um zu sehen, ob eine bestimmte Website überwacht werden muss. Wenn es die Bedingung erfüllt, übergebe ich die Website-URL in meinem anderen Java-Programm (runnable jar) mit ProcessBuilder ... und es überwacht die Website wie ich es erwarte.Monitore von einem Haupt-Java-Programm starten
Allerdings scheint dies zu großen Speicherlecks führen. Ich scheine eine "Java out of memory exception" zu bekommen, selbst wenn nur ein paar Webseiten überwacht werden ... und ich frage mich, ob es einen besseren Weg gibt, dies zu tun, als eine JAR aus einer JAR heraus aufzurufen.
Dies ist, wie ich Kick-off zur Zeit eine Website Monitor:
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();
Kann jemand bitte bitte einen besseren Weg, dies zu erreichen vorschlagen? Gewindeschneiden? Rufen Sie die Klasse direkt von Monitor.jar auf?
Zuerst müssen Sie die Quelle des Speicherlecks finden. Und nur dann versuche es zu beheben. – talex
Wenn Sie separate Apps benötigen, können Sie eine JMS-Warteschlange verwenden, zu der Ihre App jedes Mal eine Nachricht veröffentlichen würde, wenn eine Website überwacht werden muss und eine andere App diese Warteschlange abonniert und einen Thread erstellt (mit Ihrer Überwachungslogik) für jede empfangene Nachricht. – Maaaatt
Jeder Prozess hat seinen eigenen Speicherplatz, also müssen Sie prüfen, welcher Prozess den nicht ausreichenden Speicher verursacht und diese Anwendung analysieren müssen. Ich denke, dass dies nichts mit der Art zu tun hat, wie der Monitorprozess gestartet wird. – OTM