worker_connections allocates a lot of memory
Maxim Dounin
mdounin at mdounin.ru
Tue Jun 16 22:20:43 UTC 2020
Hello!
On Tue, Jun 16, 2020 at 03:42:04AM -0400, shaharmor wrote:
> I noticed that worker_connections while is defined as the maximum number of
> connections per worker, nginx pre-allocated enough memory to handle all
> possible worker_connections, even before they are actually needed.
>
> For example, setting worker_connections to 10485760 causes nginx to take
> 4.3GB of memory upon init.
>
> Is this how its supposed to be?
Yes.
> Is there a way to tell nginx to only allocate memory as needed?
No.
Connection structures are small and cannot be freed, so nginx
allocates them all on startup. This way it avoids memory
fragmentation, and makes connnection management easier and faster.
Note well that you cannot really use connection structures in
nginx without corresponding kernel structures such as sockets and
appropriate buffers, so using arbitrary large worker_connections
value does not make sense. If you are seeing that it takes
significant amount of memory, most likely you've configured it
incorrectly.
For example, some relevant numbers can be seen in the following
blog post by WhatsApp:
https://blog.whatsapp.com/1-million-is-so-2011
Numbers in suggest that about 64G of memory is needed to handle 2
millions of connections. Scaling this to 10 millions as in your
example gives about 256G, so 4G for worker_connections shouldn't
be noticeable.
--
Maxim Dounin
http://mdounin.ru/
More information about the nginx
mailing list