Perhaps I’m naive or just lucky, but I have used nginx on many contracts and permanent jobs for over ten years and have never attempted to reload canfigurations. I have always stopped then restarted nginx instances one at a time. Am I not recognizing a constraint that affects other people?
Curious , Peter Sent from my iPhone > On Mar 12, 2019, at 9:57 PM, Maxim Dounin <mdou...@mdounin.ru> wrote: > > Hello! > >> On Tue, Mar 12, 2019 at 02:09:06PM -0400, wkbrad wrote: >> >> First of all, thanks so much for your insights into this and being patient >> with me. :) I'm just trying to understand the issue and what can be done >> about it. >> >> Can you explain to me what you mean by this? >>> you can configure system allocator to use mmap() >> >> I'm not a C programmer so correct me if I'm wrong, but doesn't the Nginx >> code determine which memory allocator it uses? > > Normally C programs use malloc() / free() functions as provided by > system libc library to allocate memory. While it is possible for > an application to provide its own implementation of these > functions, this is something rarely used in practice. > >> If not can you point me to an article that describes how to do that as I >> would like to test it? > > For details on how to control system allocator on Linux, please > refer to the mallopt(3) manpage, notably the > MALLOC_MMAP_THRESHOLD_ environment variable. Web version is > available here: > > http://man7.org/linux/man-pages/man3/mallopt.3.html > > Please refer to the M_MMAP_THRESHOLD description in the same man > page for details on what it does and various implications. > > Using a values less than NGX_CYCLE_POOL_SIZE (16k by default) > should help to move all configuration-related allocations into > mmap(), so these can be freed independently. Alternatively, > recompiling nginx with NGX_CYCLE_POOL_SIZE set to a value larger > than 128k (default mmap() threshold) should have similar > effect. > > Note though that there may be other limiting factors, > such as MALLOC_MMAP_MAX_, which limits maximum number of mmap() > allocations to 65536 by default. > > You can also play with different allocators by using the > LD_PRELOAD environment variable, see for example jemalloc's wiki > here: > > https://github.com/jemalloc/jemalloc/wiki/Getting-Started > >> Also, you seem to be saying that Nginx IS attempting to free the memory but >> is not able to due to the way the OS is allocating memory or refusing to >> release the memory. I've tested this in several Linux distros, kernels, and >> Nginx versions and I see the same behavior in all of them. Do you know of >> an OS or specific distro where Nginx can release the old memory allocations >> correctly? I would like to test that too. :) > > Any Linux distro can be tuned so freed memory will be returned to > the system, see above. And for example on FreeBSD, which uses > jemalloc as a system allocator, unused memory is properly returned > to the system out of the box (though can be seen in virtual > address space occupied by the process, since the allocator uses > madvise() to make the memory as unused instead of unmapping a > mapping). > > -- > Maxim Dounin > http://mdounin.ru/ > _______________________________________________ > nginx mailing list > nginx@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx _______________________________________________ nginx mailing list nginx@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx