Geoip cache options patch

Igor Sysoev igor at
Tue Dec 21 15:27:41 MSK 2010

On Mon, Dec 20, 2010 at 06:24:26PM -0500, Akins, Brian wrote:

> On 12/20/10 5:56 PM, "Eugaia" <ngx.eugaia at> wrote:
> > Each worker process will see virtual data usage of 50MB for the data,
> > but unless I'm mistaken, the overall system usage should still only be
> > 50MB because the data is shared in the same physical memory by the OS
> > until such a time that it's changed (which it won't unless you re-read
> > the config, and in which case it would change for all worker processes).
> I think with the memory cache it reads the entire geoip datafile into memory
> for each worker process - and the memory shows as resident for each process.
> At least when I switched to using mmap cache, the memory moved from resident
> to shared.

Did you see changes in free memory in top ? Linux/top may count differently
memory implicitly shared via fork() using copy on write method and memory
explicitly shared using mmap().

nginx calls GeoIP_open() in master process while (re)configuration, so
all workers get the same physical memory unless they will modify it.
I'm not sure, but I think that GeoIP does not modify the base after it
is loaded.

BTW when GeoIP_open() uses mmap(), it calls mmap() with MAP_PRIVATE flag,
which means that pages modified in a worker ceased to be shared between
workers, so basically there is no difference from malloc() method.

Igor Sysoev

More information about the nginx-devel mailing list