<div dir="ltr">An nginx restart can take the web server offline for more than 30 seconds or so depending upon the number of server{} blocks and configuration. It may be fine for a few vhost though<div><br></div><div><div><br></div><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Mar 13, 2019 at 11:14 AM Peter Booth via nginx <<a href="mailto:nginx@nginx.org">nginx@nginx.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">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?<br>
<br>
Curious ,<br>
<br>
Peter<br>
<br>
Sent from my iPhone<br>
<br>
> On Mar 12, 2019, at 9:57 PM, Maxim Dounin <<a href="mailto:mdounin@mdounin.ru" target="_blank">mdounin@mdounin.ru</a>> wrote:<br>
> <br>
> Hello!<br>
> <br>
>> On Tue, Mar 12, 2019 at 02:09:06PM -0400, wkbrad wrote:<br>
>> <br>
>> First of all, thanks so much for your insights into this and being patient<br>
>> with me.  :)  I'm just trying to understand the issue and what can be done<br>
>> about it.<br>
>> <br>
>> Can you explain to me what you mean by this?<br>
>>> you can configure system allocator to use mmap()<br>
>> <br>
>> I'm not a C programmer so correct me if I'm wrong, but doesn't the Nginx<br>
>> code determine which memory allocator it uses?<br>
> <br>
> Normally C programs use malloc() / free() functions as provided by <br>
> system libc library to allocate memory.  While it is possible for <br>
> an application to provide its own implementation of these <br>
> functions, this is something rarely used in practice.<br>
> <br>
>> If not can you point me to an article that describes how to do that as I<br>
>> would like to test it?<br>
> <br>
> For details on how to control system allocator on Linux, please <br>
> refer to the mallopt(3) manpage, notably the <br>
> MALLOC_MMAP_THRESHOLD_ environment variable.  Web version is <br>
> available here:<br>
> <br>
> <a href="http://man7.org/linux/man-pages/man3/mallopt.3.html" rel="noreferrer" target="_blank">http://man7.org/linux/man-pages/man3/mallopt.3.html</a><br>
> <br>
> Please refer to the M_MMAP_THRESHOLD description in the same man <br>
> page for details on what it does and various implications.<br>
> <br>
> Using a values less than NGX_CYCLE_POOL_SIZE (16k by default) <br>
> should help to move all configuration-related allocations into <br>
> mmap(), so these can be freed independently.  Alternatively, <br>
> recompiling nginx with NGX_CYCLE_POOL_SIZE set to a value larger <br>
> than 128k (default mmap() threshold) should have similar <br>
> effect.<br>
> <br>
> Note though that there may be other limiting factors, <br>
> such as MALLOC_MMAP_MAX_, which limits maximum number of mmap() <br>
> allocations to 65536 by default.<br>
> <br>
> You can also play with different allocators by using the <br>
> LD_PRELOAD environment variable, see for example jemalloc's wiki <br>
> here:<br>
> <br>
> <a href="https://github.com/jemalloc/jemalloc/wiki/Getting-Started" rel="noreferrer" target="_blank">https://github.com/jemalloc/jemalloc/wiki/Getting-Started</a><br>
> <br>
>> Also, you seem to be saying that Nginx IS attempting to free the memory but<br>
>> is not able to due to the way the OS is allocating memory or refusing to<br>
>> release the memory.  I've tested this in several Linux distros, kernels, and<br>
>> Nginx versions and I see the same behavior in all of them.  Do you know of<br>
>> an OS or specific distro where Nginx can release the old memory allocations<br>
>> correctly?  I would like to test that too.  :)<br>
> <br>
> Any Linux distro can be tuned so freed memory will be returned to <br>
> the system, see above.  And for example on FreeBSD, which uses <br>
> jemalloc as a system allocator, unused memory is properly returned <br>
> to the system out of the box (though can be seen in virtual <br>
> address space occupied by the process, since the allocator uses <br>
> madvise() to make the memory as unused instead of unmapping a <br>
> mapping).<br>
> <br>
> -- <br>
> Maxim Dounin<br>
> <a href="http://mdounin.ru/" rel="noreferrer" target="_blank">http://mdounin.ru/</a><br>
> _______________________________________________<br>
> nginx mailing list<br>
> <a href="mailto:nginx@nginx.org" target="_blank">nginx@nginx.org</a><br>
> <a href="http://mailman.nginx.org/mailman/listinfo/nginx" rel="noreferrer" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx</a><br>
<br>
_______________________________________________<br>
nginx mailing list<br>
<a href="mailto:nginx@nginx.org" target="_blank">nginx@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx" rel="noreferrer" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx</a></blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><b>Anoop P Alias</b> <div><br></div></div></div></div>