Ganzes Programm "stucked" - JVM-Fehler?

SimProtect

Aktives Mitglied
Hallo,

Ich stehe vor einem ziemlichen Rätsel und bin echt mit dem Latein oder allen anderen verfügbaren Sprachen am Ende:

Einleitung
Ich entwickle eine (für mich) komplexe Mutliagenten-Simulation. Diese umfasst einen Agententypen, drei verschiedene Verhaltensweisen. Dabei entnimmt das Programm die grundlegende Programmparameter aus einer Parameterdatei, sowie die Parameter für die Simulation aus einem Geodatensatz.
Das Programm stützt sich dabei auf
ein Multiagenten-Framework (MASON),
sowie dessen "Addon" (GeoMason),
eine Lösung von zum einlesen von Geodaten (vividsolutions.jts)
und einer Entwicklung aus eingenem Hause zur Vektorrechnung

Problem
Mit der eigentlichen Simulation war ich fast fertig (dachte ich), sodass ich nur noch die grafische Ausgabe hätte gestalten müssen. Seit der letzten Änderung (ich hatte eine Methode bearbeitet und eine neu eingefügt) stoße ich aber auf ein faszinierendes Problem:
- Das ganze Programm bleibt stecken (steht), läuft aber noch <- es wurde also nicht beendet, sondern tut einfach nichts mehr

Warum faszinierend, fragt Ihr Euch sicher?
Ich habe natürlich auch zunächst an einen Programmierfehler gedacht und nach einer Endlosschleife oder einer endlosen Rekursion gesucht.
Ja, ich weiß, normalerweise müsste eine endlose Rekursion irgendwann zum StackOverflow führen. Es existiert (witzigerweise in einer der beiden Methoden) ein Workaround, der rekursiv umgesetzt wurde (bitte nicht hauen...). Dieser arbeitet jedoch mit einem Counter, der die Rekursion in der 10. Wiederholung abbricht und einen Zufallsschritt ausführt.

Da ich den Fehler nicht identifizieren konnte, habe ich die beiden Methoden auskommentiert - also sie werden nicht mehr aufgerufen. Trotzdem blieb das Programm stecken. Als ich eine der beiden wieder aufgenommen hatte, lief das Programm mehrere "Steps" (Aktionen in der laufenden Simulation) durch und bliebt stecken. Daraufhin nahm ich die Methode raus und die andere rein... das Programm lief an und blieb wieder nach wenigen "Steps" hängen.

Daraufhin hatte ich beide problemlos in der Verwendung und mehrere Tests verliefen bis zur Abbruchbedingung (50.000 Steps) vollständig durch (wir sprechen hier von einer Rechenzeit von zwei Stunden für einen vollständigen Simulationsdurchlauf). Als ich daraufhin eine System.out.println-Zeile eingefügt hatte, blieb das Programm sofort nach start der Simulation hängen.

Ich entfernte natürlich diese Zeile wieder und trotzdem blieb das Programm dauerhaft direkt beim Start hängen. Es wurde keine andere Änderung vorgenommen.

Problemzusammenfassung
-> Das Programm bleibt hängen, wird aber nicht beendet;
-> Es werde keine Exceptions geloggt (alle mit catch-Block tragen ihren StackTrace in eine Datei und eine Warnmeldung in die Konsole/LogDatei ein)
-> Stelle scheinbar zufällig, aber ohne Änderung am Quellcode immer an der selben Stelle;
-> Änderungen am Quellcode führen zu Änderungen der Abbruchstelle, die Rücknahme der Änderung stellt aber scheinbar den vorigen Stand nicht wieder her.
-> Es sind keine Endlosschleifen / Rekursionen ohne Ende auffindbar.
-> Problem tritt sowohl in Eclipse auf, als auch in der compilierten .jar-Datei
-> Problem tritt nur im Simulationsteil auf. Alle vorheringen Schritten werden korrekt ausgeführt (Parameterdatei einlesen, Geodatensatz einlesen, Objekte erzeugen, Simulation vorbereiten (Agenten erzeugen, Parameter setzen)
-> Es scheint nicht an "kritischen Stellen" stehen zu bleiben. Teilweise hängt es einfach zwischen zwei println-Zeilen, zwischen denen keine andere Anweisung steht.

Lösungsversuche (offensichtlich ohne Erfolg)
-> Deaktivierung ALLER Zufallsvariablen und ersetzen durch fixe Werte
-> Start der .jar-Datei auf einem anderen Rechner (hier wieder Stuck-Error an der selben Stelle)
-> Zuweisung von mehr Speicher (Verzweiflungsversuch: ich hatte der JVM zunächst 4GB zugesichert, dann bis zur Freigabe von 16GB hochgegangen)
-> Das Programm mehrere Stunden in der Ruhe lassen (um zu schauen, ob es vielleicht nur unglaublich langsam ist)

Fragen
So langsam verzweifle ich wirklich ... kann es sein, dass meine JVM selbst einen Sockenschuss weg hat? Aber wieso stoße ich auf anderen Systemen auf den selben Fehler? (dort müsste die .jar dann doch korrekt laufen)
Hat Jemand so ein Problem schon erlebt und/oder eine Lösung dafür?

Ich glaube eigentlich immer noch an einen total bescheuerten Programmierfehler von mir oder einem der anderen Jungs, aber ich finde den auf Gedeih und Verderb nicht oO
 

Ruzmanz

Top Contributor
Klingt nach einem Deadlock. D.h. dein Programm hat min. eine Konstellation, die das gesamte System lahmlegt. Wenn du absolut keine Ahnung hast, musst du dein Programm komplett synchronisieren und Schrittweise die Abschnitte verkleinern. Wenn du den Codeteil gefunden hast, solltest du diesen als kleine Applikation nachbauen. Dort musst du eine Lösung finden, damit der Deadlock nicht mehr auftritt. Das ganze muss "beweisbar" sein. Denn jede geänderte Programmzeile kann dazu beitragen, dass der Deadlock mit unterschiedlicher Wahrscheinlichkeit auftritt. Wenn du Pech hast, ist der Bug in der JVM. Du kannst es aus Spaß mit dem Open JDK / JDK 6 / JDK 7 / JDK 8 ausprobieren, wobei das keine Aussagekraft hat, wenn es doch zufällig funktionieren sollte.

PS: Gilt selbstverständlich nur wenn mehrere Threads für Agenten / etc. verwendet wurden. Ich kenne die genannten Frameworks nicht.
 
Zuletzt bearbeitet:

SimProtect

Aktives Mitglied
Hallo nochmal,

Danke für Deine Antwort. Nach mehreren Tagen intensiver Suche, haben wir endlich den Fehler entdecken können.
Es handelt sich - offenbar - um einen Fehler der externen Bibliothek für die Vektorrechnung. Diese läuft bei der Berechnung einer Bewegung tatsächlich in einen Deadlock, wenn ein Agent sich entweder von einem konkreten Zielpunkt weg- oder dorthin bewegen soll und sowohl Ausgangspunkt (eigene Koordinate), als auch Zielpunkt identisch sind. Leider lässt sich das nicht 100% genau sagen, da die Bibliotheken zwar im eigenen Hausen entwickelt worden sind und auch eine "Dokumentation" vorliegt, aber die eigentlich src-Files nicht verfügbar sind.
Sicherlich besteht irgendwie die Möglickeit an den Code heranzukommen und dort den Fehler zu suchen, aber wir haben uns dagegen entschieden.

Zumindest sehen an die 50 Tests mit einem Workaround, der einen Call der entsprechenden Methoden im Fehlerfalle verhindert, vielversprechend aus: Nicht ein einziger Abbruch, während die Abläufe ohne Workaround den Fehler mit einer Wahrscheinlichkeit von etwa 97% auftreten lassen.

Viele Grüße und nochmal vielen Dank

PS: Gerade, als ich das hier abschicken wollte, haben wir den Fehler endlich identifizieren können: Es kommt tatsächlich aus den Bibliotheken. Hier kommt es bei der Anwendung einer Normierungsmethode zu einem Vektor (NaN, NaN), welcher dem Agenten dann als Position übermittelt wird.
Da diese "Koordinate" direkt an die Geodaten übergeben wurde, ist uns dieser Fehler zunächst nicht aufgefallen. Im Geodatensatz muss daraufhin der Deadlock ausgelößt worden sein - unsere eigene Folgemethode, die direkt nach dem Call der Geodaten-Methode aufegrufen wurde, hätte diesen Fehler ansonsten bereinigen müssen.
Das ist jetzt schon das zweite Mal, dass wir im Rahmen dieses Projekts an eine NaN-Problematik geraten ... so viel zu "Die Vektorrechnung wurde vollständig auf alle erdenklichen Fälle getestet" ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Swing Frame schließt ganzes Programm(Jasperreport) Allgemeine Java-Themen 6
E try/catch Block um ganzes Programm Allgemeine Java-Themen 10
S auf nächstes Ganzes runden Allgemeine Java-Themen 5
P Mit getResource() ein ganzes Verzeichnis laden Allgemeine Java-Themen 5
7 Gibts in Java ne Funktion, die ein ganzes Array ausgibt Allgemeine Java-Themen 11
Jose05 Umgang mit Exceptions in einen Programm Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
R Programm führt Methoden gleichzeitig aus Allgemeine Java-Themen 2
T Der Aufruf von CMD-Programm Allgemeine Java-Themen 30
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
Mike80 Processing Programm fiert ohne Arduino ein Allgemeine Java-Themen 2
B Mysteriöse Ergebnisse beim Baccarat Programm? Allgemeine Java-Themen 13
districon Programm zum Durchsuchen von (Ebay-)Artikeln Allgemeine Java-Themen 1
T Addons im eigenen Programm Allgemeine Java-Themen 1
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
Tiago1234 Warum hängt sich mein Programm auf? Allgemeine Java-Themen 22
D Programm designen Allgemeine Java-Themen 1
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
J c Programm läuft nicht in compilierter Version des Java Projektes Allgemeine Java-Themen 7
O 2D-Grafik BioFarben-Programm soll auf Vollbild schalten Allgemeine Java-Themen 1
S Nachrichten Filter Programm Allgemeine Java-Themen 14
S Programm schreiben, das mir aufgrund von Schlagwörtern, die ich im Internet suche, relevante Themen sofort anzeigt. Allgemeine Java-Themen 1
T Hilfe bei Programm. IDE: Eclipse mit EV3-Plugin, lejos Allgemeine Java-Themen 8
Lukas2904 Swing Anzeigen lassen das das Programm geschlossen wurde Allgemeine Java-Themen 3
TechnikTVcode Mail Programm Allgemeine Java-Themen 2
S Programm entwickeln, welches ein Dreieckspuzzle lösen kann Allgemeine Java-Themen 5
R Lesen von Interfaces (Programm Vervollständigen) Allgemeine Java-Themen 10
Dann07 Java-Programm findet DLLs nicht! Allgemeine Java-Themen 20
OSchriever Linux-Programm öffnen Allgemeine Java-Themen 6
P USER Management in SQL übergreifend auf JAVA Programm Allgemeine Java-Themen 41
L Eclipse Konsole im exportierten Programm Allgemeine Java-Themen 2
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
D Verkauf von einem Programm welches ich in Java geschrieben habe Allgemeine Java-Themen 4
M Programm erkennt String aus .txt Datei nicht Allgemeine Java-Themen 3
P Erstelltes Programm ist doppelt so groß Allgemeine Java-Themen 11
N Programm nach Abschluss neustarten lassen Allgemeine Java-Themen 6
S Einfaches Programm programmieren Allgemeine Java-Themen 5
M kleines KI Programm Idee Allgemeine Java-Themen 7
D Boolean von ein anderem Java Programm während der Laufzeit ändern Allgemeine Java-Themen 23
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
I File ausführen und mein Programm bearbeiten lassen Allgemeine Java-Themen 11
ralfb1105 Starten Java App(s) (.jar) aus einem Java Programm Allgemeine Java-Themen 18
temi Java Programm aus einer DB laden und starten Allgemeine Java-Themen 2
N Programm startet nicht, nur per cmd Allgemeine Java-Themen 5
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
E Java Programm mit Clients erweitern - Möglichkeiten? Allgemeine Java-Themen 2
Joker4632 Methoden Befehl an bereits extern geöffnete Programm-spezifische Konsole senden Allgemeine Java-Themen 1
M Dieses Programm schneller machen? Allgemeine Java-Themen 2
R Programm zur Rekursion Allgemeine Java-Themen 5
N Quicksort Programm hängt sich auf Allgemeine Java-Themen 6
S Compiler-Fehler Programm verhält sich in Eclipse anders Allgemeine Java-Themen 1
B Input/Output Programm zum Auslesen/Beschreiben von Textdateien, wie Geschwindigkeit erhöhen? Allgemeine Java-Themen 18
dereki2000 Programm veröffentlichen Allgemeine Java-Themen 14
mrbig2017 Threads Chat Programm mit Threads? Allgemeine Java-Themen 2
M Suche aktuelle Apache Poi Bibliothek zum Einbinden in mein Programm Allgemeine Java-Themen 2
J Java "Bank Programm" Brauche eure Hilfe Allgemeine Java-Themen 3
S Java Programm (Spiel mit den Boxen) Allgemeine Java-Themen 1
kodela Programm hängt in der Ereigniswarteschlange Allgemeine Java-Themen 13
A Java Programm verbessern/vereinfachen Allgemeine Java-Themen 20
P Programm darf nicht mehrfach startbar sein Allgemeine Java-Themen 16
S Programm hängt sich manchmal (selten) auf Allgemeine Java-Themen 9
JavaNewbie2.0 Programm nicht im Taskmanager schliesen können Allgemeine Java-Themen 15
J XML Datei mit installiertem Programm öffnen Allgemeine Java-Themen 7
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
H Java FX 2 Fragen um Programm in mehrere sprachen zu übersetzen in Gluon Framwork Allgemeine Java-Themen 3
JavaNewbie2.0 Programm bleibt "stehen" Allgemeine Java-Themen 2
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
E Mit Java ein Python Programm starten Allgemeine Java-Themen 20
Q-bert Daten von Java Programm speichern Allgemeine Java-Themen 4
Aruetiise Methoden .jar mit Programm öffnen Allgemeine Java-Themen 2
C anderes Programm schließen! Allgemeine Java-Themen 5
C Webseiten Programm problem Allgemeine Java-Themen 5
E Programm auf Installation prüfen Allgemeine Java-Themen 1
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
E Programm ohne Windowsrand(Vollbild) ? Allgemeine Java-Themen 5
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72
P Schnittstelle java Programm zu Webserver / Browser Allgemeine Java-Themen 2
J Schutz Programm Jar Exe Allgemeine Java-Themen 7
R javax.comm --> Programm funktioniert nach Export nicht mehr Allgemeine Java-Themen 0
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
U Input/Output Warum wirft mir das Programm diesen Fehler? Allgemeine Java-Themen 6
X jvm exception abfangen und an externes Programm schicken Allgemeine Java-Themen 4
B Programm updaten mit FXLauncher Allgemeine Java-Themen 1
D Nicht quelloffenes Programm Allgemeine Java-Themen 5
F Java-Programm lizensieren Allgemeine Java-Themen 21
I Programm im Hintergrund bei Windows zur Steuerung der Tastatur nutzen Allgemeine Java-Themen 2
X Aus Programm "Installationsprogramm" machen Allgemeine Java-Themen 6
T Java Programm in Internetseite? Allgemeine Java-Themen 4
T Java Programm frisst RAM Allgemeine Java-Themen 6
H Alter Java-Programm läuft nicht mehr. Laut strace fehlt libpthread.so.0 Allgemeine Java-Themen 3
H Runtime reagiert erst wenn Programm abbricht Allgemeine Java-Themen 1
E Exceptions abfangen und dann Programm stoppen - aber wie? Allgemeine Java-Themen 2
Neumi5694 Offenes Programm nutzen Allgemeine Java-Themen 4
L Java-Programm Zahlenkombinationen ausgeben Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben