logo separator

[mkgmap-dev] Memory problems since 1245

From Steve Ratcliffe steve at parabola.me.uk on Mon Oct 5 12:25:33 BST 2009


On 05/10/09 08:52, Du Plessis, Bennie wrote:
> I don’t know where to post a ticket, but I’m sure you’ll tell me if it’s
> the wrong forum.

Hello,

No problem, this is fine place to report this.

> Since version 1245 I had to increase the memory size in the MkGMap
> command line
>
> and the virtual memory of my machine to get mkGMap to work.

There should be absolutely no difference in making the .img files.
The index generation itself could take a lot of memory, but only if you
are dealing with a lot of maps.

However the specific error you report is not related to memory (see
below).

> to send mapsource. It takes 3 hours to compile with these errors, so I
> can barely run 2 tries per night.

I know that sometimes --generate-sea can take a long time.  Also if
you are creating a map for a country that has lots of tags on every
node, then it will take a lot more memory.  This is unfortunate and I
plan to fix that problem, but it does mean that you should probably
split the file into more pieces if that is the case.  You are running
java with more virtual memory than you have physical memory on your
machine which is also guaranteed to be slow.

For me, it takes just over 4 minutes to do the UK split into 14 tiles,
and 8 seconds to make the index.

> If someone can save me time with some tips, I will sincerely appreciate it.

I would recommend that you run the index creation separately from
creating the .img files.  The index should only take a few seconds to
create once you have some .img files to work with, and will give you a
lot more time to experiment if things don't work the first time.

First, since you are using both --index and --gmapsupp, I should point
out that the index will not currently work in the gmapsupp file on the
GPS device.  It currently only works with mapsource.

The index generation only needs the .img files, not the .osm files.
So first create the .img files using all the options apart from
--index and --gmapsupp.  You can use a different version of mkgmap if
that is what it takes to make them.  It does not need to be the mdr
version if you need a fix that is the mainline for example.
You only need the mdr version to actually generate the index
in the next step.

Then run mkgmap with the --index on all the img file(s) that were
created in the previous step, apart from the overview map file (called
by default osmmap.img in the mdr branch, or 63240000.img in the
mainline).  Along with --index you will need as a
minimum --family-id but there is no harm in repeating all the other
options.

You can do the same thing to generate the gmapsupp.img, using the
--gmapsupp option, this will take even less time than the index.

> Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -68
> at java.util.ArrayList.get(Unknown Source)
> at uk.me.parabola.imgfmt.sys.BlockTable.physFromLogical(BlockTable.java: 112)
> at uk.me.parabola.imgfmt.app.trergn.RGNFileReader$RgnOffsets.<init>(RGNFileReader.java:227)

I've seen this error, but I can't remember where or what I did about
it.  If this still happens with the latest version of the mkgmap-mdr
jar file then please report back.  It is a bug and not a problem with
too little memory.

Best Regards,

..Steve




More information about the mkgmap-dev mailing list