Osmosis 0.40 java.lang.OutOfMemoryError: Java heap space

Hallo,

ich versuche aus osm.pbf Karten solche im Format 0.2.4 zu erzeugen. Das tue ich mit Osmosis 0.40 und Java 1.7. Neuere Versionen von Osmosis bringen mir schwer verständliche Fehler. Beim Erzeugen einer Schweden-Karte bekomme ich am Ende obige Fehlermeldung. Kleinere Karten von kleineren Ländern sind umsetzbar.
Nun habe ich gefunden, dass ich dem Java mehr Speicher zuordnen muss. Das soll gehen mit JAVACMD_OPTIONS=Xmx2G. Dieser Parameter ist in der osmosis.bat Datei einzutragen.
Weiß jemand, an welcher Stelle ich das in dieser Datei wie einfügen soll?

Gruß Svgt

Hi,
meine osmosis.bat fängt so an:


@ECHO OFF

set JAVACMD_OPTIONS=-Xmx1024M

hier kann die Speicherzuweisung erhöht werden. Bei Dir fehlt das Minuszeichen vor dem X.

Chris

Bitte nutze auf jeden Fall osmosis 0.43. Die älteren Versionen haben Probleme mit den 64-bittigen-Node-IDs.

Poste doch mal bitte Deine Fehlermeldungen.

Christian

Hallo,
hier für christian die Ausgabe von osmosis 0.43. Meine Umgebung ist ein Windows XP 32bit System mit 2,5GB Ram, Java 1.7.25

Ich habe gerade versucht mit 0.40 eine germany-latest.osm.pbf umzusetzen. Dabei hat er gerade noch gemeldet, dass der Lesevorgang abgeschlossen ist, dann kreiselte er 19 Stunden mit heftigem IO.

Danke an Chris für den javacmd Tipp. Ich habe es jetzt mit 1600MB laufen.

Gruß Svgt

PS: Mit 0.40 - kleinere Länder wie Österreich und Schweiz laufen ohne Fehler durch, Schweden in der gleichen Größenklasse geht nie über 40 % Ausgabe, Deutschland kommt nicht über das Abschließen des Lesens hinaus.

ich lade das bei pic-upload.de hoch - kostet nix, bringt werbung, aber wofür gibt es beta-blocker AD-Blocker?

**Vergiss bitte ab sofort alle Versionen < 0.43 ** - das ist reiner Zufall ob das irgendwo mal klappt. Erst ab 0.43 kann osmosis mit IDs > 2GB umgehen und wir sind inzwischen bei 2.434.902.010 !!!


planet=# select max(id) from nodes;
    max     
------------
 2434902010
(1 row)

Gruss
walter

p.s. 19h für Germany ist durchaus ok. solltest mal beobachten ob und wie deine DB größer wird

Hallo,
ich bedanke mich für die vielen Tipps nach kurzer Zeit. Ich habe nun Osmosis 0.43.1 unter Linux installiert. Ich benutze vorläufig OpenJDK. Beim Versuch zum Karten erzeugen, bekomme ich folgende Meldungen:

hans@hans-ESPRIMO-E5905 ~/osmosis $ bin/osmosis -plugin org.mapsforge.preprocessing.map.osmosis.MapFileWriterPluginLoader --rb file=andorra-latest.osm.pbf --mapfile-writer file=andorra-0.2.4.map type=hd
Aug 28, 2013 7:30:20 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Osmosis Version 0.43.1
Aug 28, 2013 7:30:21 PM org.java.plugin.registry.xml.ManifestParser <init>
INFO: got SAX parser factory - org.apache.xerces.jaxp.SAXParserFactoryImpl@fbd1fc
Aug 28, 2013 7:30:21 PM org.java.plugin.registry.xml.PluginRegistryImpl configure
INFO: configured, stopOnError=false, isValidating=true
Aug 28, 2013 7:30:21 PM org.java.plugin.registry.xml.PluginRegistryImpl register
INFO: plug-in and fragment descriptors registered - 1
Aug 28, 2013 7:30:21 PM org.java.plugin.standard.StandardPluginManager activatePlugin
INFO: plug-in started - org.openstreetmap.osmosis.core.plugin.Core@0.0.0.42-6-gf39a160-dirty
Aug 28, 2013 7:30:21 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Preparing pipeline.
Aug 28, 2013 7:30:21 PM org.mapsforge.preprocessing.map.osmosis.MapFileWriterTask <init>
INFO: mapfile-writer version 0.2.4
Aug 28, 2013 7:30:22 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Launching pipeline execution.
Aug 28, 2013 7:30:22 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Pipeline executing, waiting for completion.
Aug 28, 2013 7:30:22 PM org.openstreetmap.osmosis.core.pipeline.common.ActiveTaskManager waitForCompletion
SEVERE: Thread for task 1-rb failed
java.lang.NullPointerException
	at org.mapsforge.preprocessing.map.osmosis.MapFileWriterTask.release(MapFileWriterTask.java:192)
	at crosby.binary.osmosis.OsmosisReader.run(OsmosisReader.java:50)
	at java.lang.Thread.run(Thread.java:724)

Aug 28, 2013 7:30:22 PM org.openstreetmap.osmosis.core.Osmosis main
SEVERE: Execution aborted.
org.openstreetmap.osmosis.core.OsmosisRuntimeException: One or more tasks failed.
	at org.openstreetmap.osmosis.core.pipeline.common.Pipeline.waitForCompletion(Pipeline.java:146)
	at org.openstreetmap.osmosis.core.Osmosis.run(Osmosis.java:92)
	at org.openstreetmap.osmosis.core.Osmosis.main(Osmosis.java:37)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launchStandard(Launcher.java:329)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:239)
	at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
	at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
	at org.codehaus.classworlds.Launcher.main(Launcher.java:47)

Ich werde es nochmal mit einem Java von Oracle versuchen. Hier mit einem Oracle Java Version 1.7.025

eberhard@eberhard-ESPRIMO ~/osmosis $ bin/osmosis -plugin org.mapsforge.preprocessing.map.osmosis.MapFileWriterPluginLoader  --rb file=~/andorra-latest.osm.pbf --mapfile-writer file=andorra-0.2.4.map  type=hd
Aug 28, 2013 7:52:54 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Osmosis Version 0.43.1
Aug 28, 2013 7:52:54 PM org.java.plugin.registry.xml.ManifestParser <init>
INFO: got SAX parser factory - org.apache.xerces.jaxp.SAXParserFactoryImpl@18e546
Aug 28, 2013 7:52:54 PM org.java.plugin.registry.xml.PluginRegistryImpl configure
INFO: configured, stopOnError=false, isValidating=true
Aug 28, 2013 7:52:55 PM org.java.plugin.registry.xml.PluginRegistryImpl register
INFO: plug-in and fragment descriptors registered - 1
Aug 28, 2013 7:52:55 PM org.java.plugin.standard.StandardPluginManager activatePlugin
INFO: plug-in started - org.openstreetmap.osmosis.core.plugin.Core@0.0.0.42-6-gf39a160-dirty
Aug 28, 2013 7:52:55 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Preparing pipeline.
java.io.FileNotFoundException: /home/eberhard/andorra-latest.osm.pbf (Datei oder Verzeichnis nicht gefunden)
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.<init>(FileInputStream.java:138)
	at crosby.binary.osmosis.OsmosisReaderFactory.createTaskManagerImpl(OsmosisReaderFactory.java:39)
	at org.openstreetmap.osmosis.core.pipeline.common.TaskManagerFactory.createTaskManager(TaskManagerFactory.java:60)
	at org.openstreetmap.osmosis.core.pipeline.common.Pipeline.buildTasks(Pipeline.java:50)
	at org.openstreetmap.osmosis.core.pipeline.common.Pipeline.prepare(Pipeline.java:112)
	at org.openstreetmap.osmosis.core.Osmosis.run(Osmosis.java:86)
	at org.openstreetmap.osmosis.core.Osmosis.main(Osmosis.java:37)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launchStandard(Launcher.java:329)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:239)
	at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
	at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
	at org.codehaus.classworlds.Launcher.main(Launcher.java:47)
Aug 28, 2013 7:52:55 PM org.mapsforge.preprocessing.map.osmosis.MapFileWriterTask <init>
INFO: mapfile-writer version 0.2.4
Aug 28, 2013 7:52:55 PM org.openstreetmap.osmosis.core.Osmosis main
SEVERE: Execution aborted.
java.lang.NullPointerException
	at org.openstreetmap.osmosis.core.pipeline.common.Pipeline.connectTasks(Pipeline.java:74)
	at org.openstreetmap.osmosis.core.pipeline.common.Pipeline.prepare(Pipeline.java:116)
	at org.openstreetmap.osmosis.core.Osmosis.run(Osmosis.java:86)
	at org.openstreetmap.osmosis.core.Osmosis.main(Osmosis.java:37)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launchStandard(Launcher.java:329)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:239)
	at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
	at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
	at org.codehaus.classworlds.Launcher.main(Launcher.java:47)

eberhard@eberhard-ESPRIMO ~/osmosis $ java -version
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) Client VM (build 23.25-b01, mixed mode)

Wenn ich es geschafft habe, kleinere Länder von Europa mit der Version 0.40 umzusetzen, sind sie dann von minderer Qualität als mit der Version 0.43.1 ?

Gruß Svgt

warum vorläufig? osmosis läuft prima unter OpenJDK - 1.7 ist auch ok. Kein Grund, irgendwas auszuprobieren oder gar umzustellen.

Schieb mal bitte die osmosis-Befehle rüber - nur da kann man einfach sehen, was los ist.

Momang: du benutzt einen Plugin? Dann muß ich leider passen, da ich den nicht kenne oder gar benutze. Was macht der denn besonderes?

Es gibt bei Osmosis und den Plugins, die ja nicht vom Osmosis-Autor sind, extreme Abhängigkeiten zwischen den Versionen. Du mußt genau die richtige Plugin-Version für osmosis 0.43 finden und benutzen! Manche modernere Plugins werden sogar mit osmosis zusammen ausgeliefert.
Das würde ich jetzt dringenst checken.

Wenn du damit leben kannst, dass alle seit ca 6 Monaten neu erfassten Daten fehlen - warum nicht :wink:

Gruss
walter

Dieses Mapsfile Writer Plugin ist nicht das neueste, weil ich ja ein altes Kartenformat 0.2.4 für Android 1.6 erzeugen will. Die Ausgangskarten osm.pbf sind neuesten Datums. also wohl auch die erzeugten Karten.

Wer weiß was über Kompatibilität dieses Plugins mit Osmosis Versionen?

Gruß Svgt

wohl der Autor - wer sonst?

hier eine Liste der mit osmosis ausgelieferten Komponenten:


/opt/install/osmosis-0.43/lib/default$ ls
aopalliance-1.0.jar                  osmosis-hstore-jdbc-0.43-RELEASE.jar       postgresql-9.1-901-1.jdbc4.jar
commons-codec-1.7.jar                osmosis-osm-binary-0.43-RELEASE.jar        protobuf-java-2.4.1.jar
commons-compress-1.4.1.jar           osmosis-pbf-0.43-RELEASE.jar               spring-aop-3.1.2.RELEASE.jar
commons-dbcp-1.4.jar                 osmosis-pbf2-0.43-RELEASE.jar              spring-asm-3.1.2.RELEASE.jar
commons-logging-1.1.1.jar            osmosis-pgsimple-0.43-RELEASE.jar          spring-beans-3.1.2.RELEASE.jar
commons-pool-1.5.4.jar               osmosis-pgsnapshot-0.43-RELEASE.jar        spring-context-3.1.2.RELEASE.jar
jpf-1.5.jar                          osmosis-replication-0.43-RELEASE.jar       spring-core-3.1.2.RELEASE.jar
mysql-connector-java-5.1.21.jar      osmosis-replication-http-0.43-RELEASE.jar  spring-expression-3.1.2.RELEASE.jar
netty-3.2.7.Final.jar                osmosis-set-0.43-RELEASE.jar               spring-jdbc-3.1.2.RELEASE.jar
osmosis-apidb-0.43-RELEASE.jar       osmosis-tagfilter-0.43-RELEASE.jar         spring-tx-3.1.2.RELEASE.jar
osmosis-areafilter-0.43-RELEASE.jar  osmosis-tagtransform-0.43-RELEASE.jar      stax2-api-3.1.1.jar
osmosis-core-0.43-RELEASE.jar        osmosis-xml-0.43-RELEASE.jar               woodstox-core-lgpl-4.1.4.jar
osmosis-dataset-0.43-RELEASE.jar     plexus-classworlds-2.4.jar                 xercesImpl-2.9.1.jar
osmosis-extract-0.43-RELEASE.jar     postgis-jdbc-1.3.3.jar                     xz-1.0.jar

dein Plugin ist wohl nicht dabei.

Das mit dem Plugin ist nur eine Vermutung von mir - aber ich liege da oft ziemlich richtig. Sei aber nicht sauer, falls ich dich auf eine falsche Fährte locke.
ansonsten wäre mal eine genauer Aufstellung des osmosis-Befehles interessant.

Gruss
walter

Ganz so schlimm ist es nicht. Solange er nicht --used-node oder --used-way benutzt oder gezielt per Kommandozeilenoption einen der kaputten IdTracker anfordert, sollte er mit 2^31+ kein Problem bekommen. Wenn ich mich recht entsinne, hat osmosis sogar schon seit 0.37 oder 0.38 “long” Node IDs.

Andererseits: wenn ein erfahrener Anwender einem sagt, nimm eine aktuelle Version, die alte ist kaputt, könnte man als Anfänger auch einfach auf ihn hören.

Bin ich mir auch nicht mehr sicher. 0.42 !

Aber ich habe das hier gefunden: [gelöst] das sollte bestimmt weiter helfen.

Gruss
walter

Im Post #6, zweiter Versuch mit Oracle JDK findet sich folgender interessanter Schnipsel. Das würde ich zunächst fixen.

bei OpenJDK hat er --rb file=andorra-latest.osm.pbf und bei Oracle --rb file=**~/**andorra-latest.osm.pbf eingegeben. Kleiner aber gemeiner Unterschied :wink:

Ich würde möglichst OpenJDK verwenden - unter anderem weil der Entwickler von osmosis das natürlich auch macht.

Gruss
walter

Ich würde erstmal probieren, ob simple Anwendungen mit osmosis laufen. Also bspw. --rb file … --wb file …

Wenn die Basics laufen kann man sich an die komplexeren Sachen machen. Dann merkt man recht fix woran es liegt.

hattu eigentlich recht :wink:

  • osmosis 0.42 installieren (sicher ist sicher)
  • OpenJDK 1.7 aktivieren
  • osmosis mit --rb … --wb … testen
  • plugin installieren
  • weiter machen

Jetzt hast Du mich doch glatt gezwungen nachzusehen. Die entscheidende Zeile

private long id;

(vorher int) taucht erstmals in 0.38 auf: https://github.com/openstreetmap/osmosis/blob/0.38/core/src/org/openstreetmap/osmosis/core/domain/v0_6/CommonEntityData.java d.h. ab dieser Version beherrscht osmosis grundsätzlich große Zahlen.
Die Versionen vor 0.42 litten “nur” daran, daß die beiden alten idTracker nicht damit umgehen konnten und bei --used-node/–used-way standardmäßig genutzt wurden bzw. als Kommandozeilenoption zur Verfügung standen.

Ich fürchte, dass neuere Plugins vom mapfile-writer keine 0.2.4 Karten mehr erzeugen können. Das muss ich wohl den Autor des Plugins fragen. Ich vermute, es wird kein Zufall sein, dass das Plugin den Suffix 0.2.4 hat.
Woher kann ich mir das ganze Paket Osmosis 0.42 herunter laden?

Gruß Svgt

uii, dachte, das müsste ganz einfach zu finden sein - nee, musste selber kräftig suchen:

http://bretth.dev.openstreetmap.org/osmosis-build/

Gruss
walter

@wambacher: danke für die Download Liste. ich werde es damit probieren.
Gruss
Svgt

Hallo,

Inzwischen habe ich es hinbekommen, eine Deutschland-Karte (1,6GB) zu erzeugen. Nach 26 Stunden fing er an, die Ausgabe-Karte zu schreiben, nach insgesamt 53 Stunden war er fertig. Nun versuche ich es mit der Frankreich-Karte (2,6GB). Bisher sind alle Versuche nach max 16 Stunden wegen OutOfMemoryError abgebrochen. Er hatte ca eine Stunde die Rohdaten eingelesen, dann ca 35GB heapWays, idxNodesd, idxNodesi, idxWaysd und idxWaysi erzeugt.

set JAVACMD_OPTIONS=-Xmx16G

Dieses ist meine maximale Speicherangabe für Java. Meine Umgebung: LinuxMint14 32bit, LinuxMint15 64bit, Osmosis 0.40, 70GB /tmp Speicher, 3GB Ram, 3GHz Dual, OpenJDK 1.7.0_15 32bit, 1.7.0_25 64bit. Ich hatte es in 32bit und 64bit Umgebung versucht.

Was könnte ich dem Java noch zusätzlich anbieten, damit er auch mit der Frankreich-Karte durchkommt?

Gruß Svgt