logo separator

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

From Apollinaris Schoell aschoell at gmail.com on Mon Sep 28 16:58:48 BST 2009

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




More information about the mkgmap-dev mailing list