Problem:
2023-01-18
Betroffen:
BESMAX 1.0
Titel:
BESMAX ohne Ergebnis und lange Rechendauer
Beschreibung:
Bei einer Rechnung mit gleichzeitig sehr hohen und sehr niedrigen Quellen (effektive Quellhöhe) benötigt BESMAX sehr viel RAM-Speicher, da für die Überlagerung der Konzentrationsfahnen ein sehr großes Gebiet (einige 10 km, wegen der hohen Quellen) bei gleichzeitig sehr feiner räumlicher Auflösung (3 m, wegen der niedrigen Quellen) betrachtet und dafür erheblicher Speicherplatz eingesetzt werden muss. Das Problem wird durch die Nebenläufigkeit (multi-threading) verstärkt, denn dieser Speicherplatz wird für jede Thread benötigt. Standardmäßig kann die JAVA-Anwendung insgesamt rund 4 GB Speicher nutzen. Reicht das nicht aus, gibt es einen internen Fehler, die einzelnen Rechnungen laufen jedoch weiter und am Ende wird kein Ergebnis ausgewiesen.
Workaround:
Das Problem kann vermieden werden, indem der Benutzer das Programm im Kommandozeilenmodus aufruft (Eingabeaufforderung unter Windows, Konsole unter Linux) und dabei den maximalen Speicher für das JAVA-Programm und die Anzahl der Threads explizit vorgibt. Der maximale Speicher wird durch die der Option "-jar" vorangestellte Option "-Xmx?g" festgelegt, wobei ? die Anzahl der Gigabyte ist. Die Anzahl der Threads wird als BESMAX-Option "--num-threads=?" festgelegt, wobei ? die Anzahl der Threads oder 0 (keine Nebenläufigkeit) ist.
Hierbei kann folgende Faustregel verwendet werden: Im ungünstigsten Fall benötigt eine Thread etwa 5 GB. Der insgesamt installierte RAM minus rund 5 GB für andere Zwecke und dann geteilt durch 5 ergibt die Anzahl der Threads, die maximal eingesetzt werden dürfen, um Speicherprobleme zu vermeiden.
Beispiel:
Bei einem Rechner mit 16 GB RAM sollten zwei Threads verwendet und 10 GB Speicher für das JAVA-Programm zugewiesen werden (16 GB minus 5 GB sind 11 GB, das reicht für 2 Threads der Größe 5 GB). Der Aufruf lautet (aus dem BESMAX-Ordner heraus):
jre\bin\java -Xmx10g -jar jar\Besmax.jar --num-threads=2 [...]
eventuell ergänzt ([...]) um weitere Optionen, mit denen die Quellen direkt vorgegeben werden (siehe Handbuch). Dieser Aufruf kann auch als Batch-Prozedur bzw. Shell-Skript festgelegt werden, so dass er sich später leicht wiederholen oder abändern lässt.
Behoben am:
2024-03-23, BESMAX 1.1.0 mit automatischer Anpassung der Thread-Anzahl