logo separator

[mkgmap-dev] Mkgmap appears to hang on some split files

From Lambertus osm at na1400.info on Mon Sep 28 17:08:29 BST 2009

Thanks for sharing this. Good to know that I don't have to buy a 
quadcore yet :-)

Apollinaris Schoell wrote:
> have seen frequent java crashes when I run more than one mkmap in  
> parallel. Even when the machine has 4 cores and plenty of memory.
> it happens for openJDK and sun java.
> when I run ~400 tiles for north america it runs without crash, 2  
> parallel jobs are ok most of the time but 3 jobs is too much and java  
> crashes about every 50th tile
> 
> 
> On 28 Sep 2009, at 8:38 , Lambertus wrote:
> 
>> The box is a laptop with a single Intel P8600 CPU (dual core Penryn)  
>> and when the process hangs it's just 1 core that is at 100% (I use  
>> only one core so I can render America and Eurasia in parallel).
>>
>> I've tried the --max-jobs=1 parameter a few times and got it to  
>> hang, stackdump (which seems identical to the earlier one I posted)  
>> is attached. Funny thing is that the process produces a stackdump  
>> with kill -3 <pid> but it continues to run at 100%. Kill -4 is  
>> needed to persuade it to really stop.
>>
>>
>>
>> Chris Miller wrote:
>>> Ah ok that makes more sense. A crash dump usually indicates the VM  
>>> has a bug or has died 'violently' (as is the case here). A stack  
>>> dump on the other hand is produced by the VM and shows you what  
>>> Java code is currently executing.
>>> It looks like you are running on a dual CPU box (two dual-core  
>>> Xeons?). Are you also saying that you only hit the problem  
>>> sometimes; you can rerun the same command again and it will run to  
>>> completion just fine? Also, you say mkgmap is hung at 100% CPU. Is  
>>> that all 4 cores, or just one of them?
>>> One thing dual CPU boxes can be good at is highlighting otherwise  
>>> obscure multithreaded bugs. I'm not familiar with the threading in  
>>> mkgmap but possibly you're hitting a race condition in the code (eg  
>>> an unsynchronized HashMap can behave like this). I've just had a  
>>> quick glance at the code however and can't see anything obvious -  
>>> there's very little shared state and what little there is appears  
>>> to be synchronized OK. Which makes me wonder if, as Steve points  
>>> out, the problem lies with your VM rather than mkgmap. Definitely  
>>> worth trying another (or newer version of the existing) VM.
>>> Thanks for getting a stack dump. It's interesting, mkgmap is inside  
>>> native array-copying code while parsing an osm file. There's only  
>>> one worker thread running at this point, I'm surprised to see it  
>>> hanging there. Can you try running with --max-jobs=1 to see if the  
>>> problem still happens?
>>> Chris
>>> L> Thanks Steve, Chris,
>>> L> L> The error files were produced using kill -4 <pid>. Kill -1  
>>> till -3
>>> L> had no effect on the process. Just switching to using Sun Java is
>>> L> probably the easy way out, but I reckon it's interesting to find  
>>> out
>>> L> what happened :-), so next time I'll try jstack before killing the
>>> L> process.
>>> L> L> Sorry that the VM crash dumps aren't useful.
>>> L> L> Steve Ratcliffe wrote:
>>> L>
>>>>> On 28/09/09 13:53, Lambertus wrote:
>>>>>
>>>>>> It happened again, this time straight from the commandline while
>>>>>> trying to render the three failed tiles at once by providing r2228
>>>>>> the *.osm.gz parameter... Stack dump is attached.
>>>>>>
>>>>> Those hs_err_* files were not what I was expecting at all.  You
>>>>> normally get one of those when the java process itself crashes and
>>>>> that is always a bug in java and not the application.  How exactly
>>>>> did you provoke it into dropping that file?
>>>>>
>>>>> I see from them that you are using the openjdk with Ubuntu,
>>>>> so I tried openjdk on my Fedora machine and didn't get a problem  
>>>>> but
>>>>> then it is 32bit and has a higher build number so probably has
>>>>> different (perhaps fewer ;) bugs.
>>>>> If you can I'd try the Sun jdk instead to see if that is any
>>>>> different.
>>>>>
>>>>> ..Steve
>>> _______________________________________________
>>> mkgmap-dev mailing list
>>> mkgmap-dev at lists.mkgmap.org.uk
>>> http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev
>> java -Xmx1792M -ea -jar ~/garmin/utils/mkgmap-r1228/mkgmap.jar -- 
>> latin1 --code-page=1252 --name-tag-list=name:en,int_name,name -- 
>> remove-short-arcs --add-pois-to-areas --make-opposite-cycleways -- 
>> link-pois-to-ways --description='OSM World Routable' --route -- 
>> series-name='OSM World Routable' --max-jobs=1 *.osm.gz
>> 2009-09-28 17:33:19
>> Full thread dump OpenJDK 64-Bit Server VM (14.0-b08 mixed mode):
>>
>> "pool-1-thread-1" prio=10 tid=0x00007f783c05b800 nid=0x44c waiting  
>> on condition [0x00007f783baf9000..0x00007f783baf9c70]
>>   java.lang.Thread.State: RUNNABLE
>> 	at java.util.Arrays.copyOfRange(Arrays.java:3221)
>> 	at java.lang.String.<init>(String.java:233)
>> 	at com.sun.org.apache.xerces.internal.xni.XMLString.toString 
>> (XMLString.java:188)
>> 	at  
>> com.sun.org.apache.xerces.internal.util.XMLAttributesImpl.getValue 
>> (XMLAttributesImpl.java:540)
>> 	at  
>> com.sun.org.apache.xerces.internal.xinclude.XIncludeHandler.processAttributes 
>> (XIncludeHandler.java:2033)
>> 	at  
>> com.sun.org.apache.xerces.internal.xinclude.XIncludeHandler.emptyElement 
>> (XIncludeHandler.java:980)
>> 	at  
>> com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement 
>> (XMLNSDocumentScannerImpl.java:353)
>> 	at  
>> com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl 
>> $FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2723)
>> 	at  
>> com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next 
>> (XMLDocumentScannerImpl.java:624)
>> 	at  
>> com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next 
>> (XMLNSDocumentScannerImpl.java:116)
>> 	at  
>> com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument 
>> (XMLDocumentFragmentScannerImpl.java:486)
>> 	at  
>> com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse 
>> (XML11Configuration.java:810)
>> 	at  
>> com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse 
>> (XML11Configuration.java:740)
>> 	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse 
>> (XMLParser.java:110)
>> 	at  
>> com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse 
>> (AbstractSAXParser.java:1208)
>> 	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl 
>> $JAXPSAXParser.parse(SAXParserImpl.java:525)
>> 	at javax.xml.parsers.SAXParser.parse(SAXParser.java:392)
>> 	at javax.xml.parsers.SAXParser.parse(SAXParser.java:195)
>> 	at uk.me.parabola.mkgmap.reader.osm.xml.Osm5MapDataSource.load 
>> (Osm5MapDataSource.java:80)
>> 	at uk.me.parabola.mkgmap.main.MapMaker.loadFromFile(MapMaker.java: 
>> 148)
>> 	- locked <0x00007f78411fd1e8> (a java.lang.Class for  
>> uk.me.parabola.mkgmap.main.MapMaker)
>> 	at uk.me.parabola.mkgmap.main.MapMaker.makeMap(MapMaker.java:56)
>> 	at uk.me.parabola.mkgmap.main.Main$1.call(Main.java:186)
>> 	at uk.me.parabola.mkgmap.main.Main$1.call(Main.java:184)
>> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
>> 	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
>> 	at java.util.concurrent.ThreadPoolExecutor.runWorker 
>> (ThreadPoolExecutor.java:1110)
>> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run 
>> (ThreadPoolExecutor.java:603)
>> 	at java.lang.Thread.run(Thread.java:636)
>>
>> "Low Memory Detector" daemon prio=10 tid=0x00007f783c029000  
>> nid=0x44a runnable [0x0000000000000000..0x0000000000000000]
>>   java.lang.Thread.State: RUNNABLE
>>
>> "CompilerThread1" daemon prio=10 tid=0x00007f783c025800 nid=0x449  
>> waiting on condition [0x0000000000000000..0x00007f783bdfb230]
>>   java.lang.Thread.State: RUNNABLE
>>
>> "CompilerThread0" daemon prio=10 tid=0x00007f783c023800 nid=0x448  
>> waiting on condition [0x0000000000000000..0x00007f783befc2b0]
>>   java.lang.Thread.State: RUNNABLE
>>
>> "Signal Dispatcher" daemon prio=10 tid=0x00007f783c021800 nid=0x447  
>> waiting on condition [0x0000000000000000..0x0000000000000000]
>>   java.lang.Thread.State: RUNNABLE
>>
>> "Finalizer" daemon prio=10 tid=0x00007f783c001000 nid=0x446 in  
>> Object.wait() [0x00007f7840189000..0x00007f7840189b70]
>>   java.lang.Thread.State: WAITING (on object monitor)
>> 	at java.lang.Object.wait(Native Method)
>> 	- waiting on <0x00007f784b682b68> (a java.lang.ref.ReferenceQueue 
>> $Lock)
>> 	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:133)
>> 	- locked <0x00007f784b682b68> (a java.lang.ref.ReferenceQueue$Lock)
>> 	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:149)
>> 	at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:177)
>>
>> "Reference Handler" daemon prio=10 tid=0x0000000000db2800 nid=0x445  
>> waiting for monitor entry [0x00007f784028a000..0x00007f784028abf0]
>>   java.lang.Thread.State: BLOCKED (on object monitor)
>> 	at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:126)
>> 	- waiting to lock <0x00007f784bb954f8> (a java.lang.ref.Reference 
>> $Lock)
>>
>> "main" prio=10 tid=0x0000000000d4a000 nid=0x441 waiting on condition  
>> [0x00007f78c13aa000..0x00007f78c13aae90]
>>   java.lang.Thread.State: TIMED_WAITING (sleeping)
>> 	at java.lang.Thread.sleep(Native Method)
>> 	at uk.me.parabola.mkgmap.main.Main.endOptions(Main.java:310)
>> 	at uk.me.parabola.mkgmap.CommandArgsReader.readArgs 
>> (CommandArgsReader.java:124)
>> 	at uk.me.parabola.mkgmap.main.Main.main(Main.java:118)
>>
>> "VM Thread" prio=10 tid=0x0000000000dae000 nid=0x444 runnable
>>
>> "GC task thread#0 (ParallelGC)" prio=10 tid=0x0000000000d54000  
>> nid=0x442 runnable
>>
>> "GC task thread#1 (ParallelGC)" prio=10 tid=0x0000000000d56000  
>> nid=0x443 runnable
>>
>> "VM Periodic Task Thread" prio=10 tid=0x00007f783c02b800 nid=0x44b  
>> waiting on condition
>>
>> JNI global references: 863
>>
>> Heap
>> PSYoungGen      total 222912K, used 30912K [0x00007f7896110000,  
>> 0x00007f78afee0000, 0x00007f78bb660000)
>>  eden space 30912K, 100% used  
>> [0x00007f7896110000,0x00007f7897f40000,0x00007f7897f40000)
>>  from space 192000K, 0% used  
>> [0x00007f78a4360000,0x00007f78a4360000,0x00007f78afee0000)
>>  to   space 196416K, 0% used  
>> [0x00007f7897f40000,0x00007f7897f40000,0x00007f78a3f10000)
>> PSOldGen        total 1223360K, used 1221420K [0x00007f784b660000,  
>> 0x00007f7896110000, 0x00007f7896110000)
>>  object space 1223360K, 99% used  
>> [0x00007f784b660000,0x00007f7895f2b358,0x00007f7896110000)
>> PSPermGen       total 21248K, used 6198K [0x00007f7840e60000,  
>> 0x00007f7842320000, 0x00007f784b660000)
>>  object space 21248K, 29% used  
>> [0x00007f7840e60000,0x00007f784146d8b0,0x00007f7842320000)
>>
>>
>>
>> _______________________________________________
>> mkgmap-dev mailing list
>> mkgmap-dev at lists.mkgmap.org.uk
>> http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev
> 
> _______________________________________________
> mkgmap-dev mailing list
> mkgmap-dev at lists.mkgmap.org.uk
> http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev




More information about the mkgmap-dev mailing list