Here are some tips for allocating resources to properly run a world Gazetteer GeoLocator. I started by using these tools created just for this located here Geonames Locator | ArcGIS for Defense . These were a great help but I ran in to some minor issues with this when I modified it to turn on the suggest for the GeoLocator. I found I had to update it to run in the background and install the 64bit background GP processing to my ArcMap. Once I did this I was able to create the GeoLocator with out any issues. When I went to publish it there were System Memory issues that had to be address. I found an old blog post that helped with this so I thought I would post it here for other to find.
ArcGIS locators support a “Run Time Memory Limit” parameter. For large geocoding jobs working against a large locator such as US streets, or world, you will want to set this limit near the capabilities of the system. With ArcGIS 10.5.1, geocoding performance continues improving as the cache grows beyond 2GB. By default, ArcGIS locators are configured to use 1024 MB of system memory. ArcGIS supports use of 2GB memory on a 32-bit system and 3GB of memory on a 64-bit system.
There is a formula for determining out how much memory the system should have to run this kind of locator. When the RuntimeMemoryLimit is set to 2 GB then you should allocate 3 GB per locator instance (there is some additional overhead and then we round up). Additionally, you will want to have a minimum of 4 GB of RAM for ArcGIS Server.
(8 instances * 3 GB) + 4 GB for Server = a minimum 28 GB of RAM required.
Instructions for increasing the run time memory limit. This step must be done prior to publishing the locator as a service:
- Open the Gazetteer folder containing the Gazetteer locator.
- Open the *.loc file in a text editor (e.g. NGAGeonames.loc).
- Look for the line that starts with RuntimeMemoryLimit =
- If the value does not exist, create one and change the value to represent the number of bytes of system memory you want to allocate for the locator: RuntimeMemoryLimit = 2048000000
- Save the locator.
- Open the *.loc.xml file (e.g. NGAGeonames.loc.xml).
- Update each instance of “RuntimeMemoryLimit“ to 2048 MB
- Lastly use the locator and compare performance and system memory use.
I hope you found this useful. If you have any other tuning suggestions I would love to see them in the comments.