Exception in thread "Generieren (action)" java.lang.OutOfMemoryError: GC overhead limit exceeded

Diskussionen zu dem Werkzeug hinter der Karte und für eigene Garminkarten
Antworten
Gast

Exception in thread "Generieren (action)" java.lang.OutOfMemoryError: GC overhead limit exceeded

Beitrag von Gast »

[Garminix schrieb am 19.03.17 18:13]
Hallo Mapcomposer-Fans,

ich bin mittlerweile total begeistert von dem Programm und die einfache
Anpassungsmöglichkeiten über die Render- / Ersetzungsregeln.

Doch leider stoße ich grad an meine Grenzen ;)

Ich habe bis jetzt immer nur einzelne Länder bzw. kleine Bereiche erstellt
(dank Nop, jetzt ohne Fehler).

Ich wollte gestern als Grundkarte für mein Garmin Montana eine aktuelle Karte
von Deutschland/Schweiz/Österreich erstellen, dazu hab ich mir die 3,7 Gb bei
Geofabrik runtergeladen und den Erstellungsprozess gestartet.

Leider bekommen ich beim Prozess-Schritt "Analysiere Daten für . . ."
folgenden Fehler:

Exception in thread "Generieren (action)" java.lang.OutOfMemoryError: GC
overhead limit exceeded
at nop.osmc.generator.Analyzer.getNode(Analyzer.java:488)
at nop.osmc.generator.Analyzer.readData(Analyzer.java:417)
at nop.osmc.generator.Analyzer.standardAnalysis(Analyzer.java:115)
at nop.osmc.generator.Analyzer.analyze(Analyzer.java:72)
at nop.osmc.generator.Mapper.generate(Mapper.java:202)
at nop.osmc.MapComposer$12.act(MapComposer.java:414)
at nop.gui.MenuThreadAction.run(MenuThreadAction.java:27)
at java.lang.Thread.run(Unknown Source)

Ich starte die "start_x64_bat" mit "Xmx6000". Sollte also genügend Speicher da
sein. Auch ein reduzieren der Maximalen Objekte / kachel von 2000 auf 1000 und
Erhöhen des Speichers für JavaAufrufe auf 1600 brachte kein Erfolg.

Kann ich noch etwas anderes anpassen (hab 8 GB Hauptspeicher)?

Danke euch.

Gruß,

Garminix
Gast

Re: Exception in thread "Generieren (action)" java.lang.OutOfMemoryError: GC overhead limit exceeded

Beitrag von Gast »

[Nop schrieb am 19.03.17 18:51]
Der "Speicher für Java Aufrufe" und die maximalen Objekte spielen hier keine
Rolle.

Hast Du das Häkchen "Schnell" hinter "Composer / Daten verarbeiten" gesetzt?

Falls nicht versucht Composer alle Punkte nach ID zu sortieren - und dafür
reicht vermutlich Dein Speicher nicht aus. Das ist bei PBFs aber auch gar nicht
nötig.

bye, Nop


Zuletzt bearbeitet am 20.03.17 13:19
Gast

Re: Exception in thread "Generieren (action)" java.lang.OutOfMemoryError: GC overhead limit exceeded

Beitrag von Gast »

[mtbbiker99 schrieb am 21.12.17 18:04]
Hallo zusammen,

verzweifel gerade... den gleichen bzw. so einen ähnlichen Fehler bekomme ich
zur Zeit auch...

Code: Alles auswählen

Exception in thread "PBF Reader 
/home/mtbbiker99/west_map/input/WESTkarte_8_input.osm.pbf" Exception in thread 
"pool-1-thread-1" java.lang.OutOfMemoryError: Java heap space: failed 
reallocation of scalar replaced objects
 at java.util.LinkedList.linkLast(LinkedList.java:142)
 at java.util.LinkedList.addLast(LinkedList.java:304)
 at nop.osm.OSMInputFile.process(OSMInputFile.java:300)
 at nop.osm.pbf.PbfDecoder.sendResultsToSink(PbfDecoder.java:112)
 at nop.osm.pbf.PbfDecoder.processBlobs(PbfDecoder.java:177)
 at nop.osm.pbf.PbfDecoder.run(PbfDecoder.java:189)
 at nop.osm.pbf.PbfReader.run(PbfReader.java:56)
 at java.lang.Thread.run(Thread.java:748)
java.lang.OutOfMemoryError: Java heap space
 at nop.osm.pbf.PbfBlobDecoder.processNodes(PbfBlobDecoder.java:292)
 at nop.osm.pbf.PbfBlobDecoder.processOsmPrimitives(PbfBlobDecoder.java:422)
 at nop.osm.pbf.PbfBlobDecoder.runAndTrapExceptions(PbfBlobDecoder.java:442)
 at nop.osm.pbf.PbfBlobDecoder.run(PbfBlobDecoder.java:465)
 at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
 at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
 at java.lang.Thread.run(Thread.java:748)
Bei mir bricht der Map composer an der gleichen Stelle ab, also bei Analysiere
Daten für.... /LOG-Fenster: Newer input file detected Obwohl keine neuen
"Input-Dateien" da sind.
Das Verändern der JAVA-Werte von 1100 bis zu 6666 brachte auch keinen Erfolg.

Das komische ist, dass es gestern noch ging.

commands.log:

Code: Alles auswählen

rem Cutting data with osmosis

java -Xmx1100M -cp 
/home/mtbbiker99/west_map/Tools/lib/default/osmosis-core-0.43.1.jar:/home/mtbbiker99/west_map/Tools/lib/default/commons-compress-1.4.1.jar:/home/mtbbiker99/west_map/Tools/lib/default/osmosis-xml-0.43.1.jar:/home/mtbbiker99/west_map/Tools/lib/default/commons-logging-1.1.1.jar:/home/mtbbiker99/west_map/Tools/lib/default/osmosis-pbf-0.43.1.jar:/home/mtbbiker99/west_map/Tools/lib/default/protobuf-java-2.4.1.jar:/home/mtbbiker99/west_map/Tools/lib/default/osmosis-core-0.43.1.jar:/home/mtbbiker99/west_map/Tools/lib/default/osmosis-areafilter-0.43.1.jar:/home/mtbbiker99/west_map/Tools/lib/default/osmosis-osm-binary-0.43.1.jar:/home/mtbbiker99/west_map/Tools/lib/default/jpf-1.5.jar 
org.openstreetmap.osmosis.core.Osmosis --read-bin 
file=/home/mtbbiker99/west_map/tmp/nordrhein-westfalen.osm.pbf --bounding-box 
bottom=50.6 left=6.0 top=52.3 right=9.0 clipIncompleteEntities=yes --write-pbf 
file=/home/mtbbiker99/west_map/input/WESTkarte_8_input.osm.pbf omitmetadata=true

Dez 21, 2017 5:39:48 PM org.openstreetmap.osmosis.core.Osmosis run
INFORMATION: Osmosis Version 0.43.1
Dez 21, 2017 5:39:48 PM org.openstreetmap.osmosis.core.Osmosis run
INFORMATION: Preparing pipeline.
Dez 21, 2017 5:39:48 PM org.openstreetmap.osmosis.core.Osmosis run
INFORMATION: Launching pipeline execution.
Dez 21, 2017 5:39:49 PM org.openstreetmap.osmosis.core.Osmosis run
INFORMATION: Pipeline executing, waiting for completion.
Dez 21, 2017 5:42:20 PM org.openstreetmap.osmosis.core.Osmosis run
INFORMATION: Pipeline complete.
Dez 21, 2017 5:42:20 PM org.openstreetmap.osmosis.core.Osmosis run
INFORMATION: Total execution time: 151559 milliseconds.
Nop:...

Falls nicht versucht Composer alle Punkte nach ID zu sortieren - und dafür
reicht vermutlich Dein Speicher nicht aus. Das ist bei PBFs aber auch gar nicht
nötig.


Wäre dann die einzige Maßnahme ein RAM-Erweiterung und wie bringe ich den
composer dazu nicht nach ID zu sortieren?

Gruß mtbbiker99
(Garmin GPSmap64s, etrex 20x, Colorado300, Ubuntu17.10)


Zuletzt bearbeitet am 21.12.17 18:21
Gast

Re: Exception in thread "Generieren (action)" java.lang.OutOfMemoryError: GC overhead limit exceeded

Beitrag von Gast »

[mtbbiker99 schrieb am 22.12.17 00:13]
Hallo nochmal,

nerven will ich nicht, aber nach einem Urlaubstag tüfteln habe ich folgendes
herausgefunden:
- map composer 1.0 läuft bei mir auf einem Ubuntu 17.10 System bei kleinen
Karten wie das Ruhrgebiet ohne Probleme
- beim Erstellen einer größeren Karten von NRW kamen die o.g Java-Probleme auf

Meine Lösung:
Java 9 aus offizellen Paket-Quellen installieren!

Code: Alles auswählen

mtbbiker99@mtbbiker99:~/map_composer_100$ java -version
 openjdk version "9-Ubuntu"
 OpenJDK Runtime Environment (build 9-Ubuntu+0-9b181-4)
 OpenJDK 64-Bit Server VM (build 9-Ubuntu+0-9b181-4, mixed mode)
Gruß mtbbiker99
(Garmin GPSmap64s, etrex 20x, Colorado300, Ubuntu17.10)
Gast

Re: Exception in thread "Generieren (action)" java.lang.OutOfMemoryError: GC overhead limit exceeded

Beitrag von Gast »

[Nop schrieb am 23.12.17 11:32]
Am effizientesten läuft Composer mit .PBF Dateien und dem aktivierten Häkchen
"schnell". Viel Speicher verbraucht er bei großen Karten aufgrund der großen
Datenmenge immer.

Der Speicherüberlauf tritt hier eindeutig beim Lesen aus der .PBF-Datei auf.
Eigentlich sollte es immer Abhilfe schaffen, den -Xmx Parameter beim Aufruf zu
erhöhen oder den Verbrauch von Composer durch Verkleinern von "Nodecache" zu
reduzieren. Er läuft bei letzterem dann halt langsamer.

Aber eine Karte von NRW sollte mit -Xmx6000M überhaupt kein Problem sein. Das
ist alles recht merkwürdig - auch daß es nur vorübergehend auftritt.

Welches JRE/JDK genau hast Du denn verwendent wo das Problem aufgetreten ist?

bye, Nop
Gast

Re: Exception in thread "Generieren (action)" java.lang.OutOfMemoryError: GC overhead limit exceeded

Beitrag von Gast »

[mtbbiker99 schrieb am 23.12.17 19:57]
Nop:....Eigentlich sollte es immer Abhilfe schaffen, den -Xmx Parameter beim
Aufruf zu erhöhen oder den Verbrauch von Composer durch Verkleinern von
"Nodecache" zu reduzieren. Er läuft bei letzterem dann halt langsamer.

Wo stelle ich denn den -Xmx Parameter ein? Ist damit der Nodecache gemeint
(Standard ist da 1000)?


Nop:
Welches JRE/JDK genau hast Du denn verwendent wo das Problem aufgetreten ist?


Die besagten Probleme hatte ich bei folgender Version:

mtbbiker99@mtbbiker99:~/map_composer_100$ java -version
openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-0ubuntu0.17.10.2-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)

Jetzt habe ich die JAVA-Version 9 (siehe oben) aufgespielt und die Probleme
sind verschwunden. NRW ist kein Problem mehr.

Gestern habe ich etliche Durchläufe vorgenommen und jedes mal von vorne
angefangen, also den komplettenmap_composer_100-Ordner immer wieder geleert.
Ca. 28 Minuten dauert bei mir der komplette Durchlauf bei diesem Laptop:
<https://i.imgur.com/cmB5HMe.jpg>


Gruß mtbbiker99
(Garmin GPSmap64s, etrex 20x, Colorado300, Ubuntu17.10)


Zuletzt bearbeitet am 23.12.17 20:04
Gast

Re: Exception in thread "Generieren (action)" java.lang.OutOfMemoryError: GC overhead limit exceeded

Beitrag von Gast »

[Nop schrieb am 23.12.17 20:43]
-Xmx ist ein Java-Parameter und wird im Startscript/batch Datei eingestellt,
z.B.

Code: Alles auswählen

java -Xmx2000M -cp map_composer.jar;...
sagt Java, daß es bis zu 2 GB Speicher verwenden darf.

Nodecache ist eine Einstellung innerhalb von Composer, die ihm sagt wieviele
Punkte aus dem OSM-Daten er im Speicher halten soll. Je größer dieser Wert umso
schneller läuft Composer bei großen Karten und umso mehr Speicher verbraucht
er. Wenn der Speicherverbrauch hier größer wird als der mit -Xmx erlaubte
Speicher gibt es einen Fehler.

In Deinem Fall vermute ich daß Du über eine Spezialität des OpenJDK gestolpert
bist. Ich verwende das Oracle JDK 1.8 unter Windows, da habe ich sowas nie
beobachtet.

bye, Nop
Gast

Re: Exception in thread "Generieren (action)" java.lang.OutOfMemoryError: GC overhead limit exceeded

Beitrag von Gast »

[mtbbiker99 schrieb am 23.12.17 21:17]
Danke für die schnelle Antwort.

Abschließend, damit ich das richtig verstanden habe. Bei solchen Fehler den
Nodecache verkleinern bzw. so wie es der user Garminix getan
den -Xmx Wert auf 6000 erhöhen (wei mir wäre teoretisch 5500 frei)?


Gruß mtbbiker99
(Garmin GPSmap64s, etrex 20x, Colorado300, Ubuntu17.10)


ps.: Ich wünsche schon mal schöne Feiertage.
Gast

Re: Exception in thread "Generieren (action)" java.lang.OutOfMemoryError: GC overhead limit exceeded

Beitrag von Gast »

[Nop schrieb am 24.12.17 10:15]
Wenn man das Optimum herauskitzeln möchte:
- ausprobieren wie hoch man mit -Xmx gehen kann. Wenn der Wert zu hoch ist
meldet Java sofort einen Fehler und startet erst gar nicht.
- danach mit htop, Process Explorer oder so dem Composer beim Arbeiten
zusehen, wieviel Speicher er tatsächlich nutzt. Wenn der höchste Wert deutlich
unter dem -Xmx Wert ist, Nodecache ein Stück erhöhen.

Ich fahre Composer bei mir mit -Xmx:20000M und Nodecache 6000. Aber mein
Rechner ist mit 32GB auch extra für Kartenerzeugung gebaut.

bye, Nop


Zuletzt bearbeitet am 24.12.17 10:16
Antworten