Memory Management ( > 25GB memory usage)
Maxim Dounin
mdounin at mdounin.ru
Mon Jun 3 13:51:04 UTC 2013
Hello!
On Mon, Jun 03, 2013 at 08:57:21AM -0400, Belly wrote:
> Hello nginx!
>
> I have one worker-process, which uses over 25GB memory (and doesn't stop to
> do that).
> My configuration is... let's say special:
>
> So there is nginx, which proxies all requests to the PHP backend and the PHP
> backend sends a large request back to nginx. I set the fastcgi_buffers very
> enormous huge to avoid nginx creating temporary files on my disk - which
> would result in high CPU load.
>
> Here is my configuration: (reduced to the problem)
>
> worker_processes 1;
> worker_rlimit_nofile 80000;
> worker_priority -20;
>
> events {
> worker_connections 10240;
> multi_accept on;
> }
> # ...
> # fastcgi settings
> fastcgi_buffers 20480 1k;
Just a side note: each buffer structure takes about 100 bytes of
memory on 64-bit platforms, and using 1k buffers results in about
10% overhead just because of this.
> fastcgi_connect_timeout 30;
> fastcgi_read_timeout 30;
> fastcgi_send_timeout 30;
> fastcgi_keep_conn on;
> upstream php-backend {
> server 127.0.0.1:9000;
> keepalive 10000;
> }
>
>
> As you can see the buffers are extreme large, to avoid disk buffering. The
> problem is that nginx doesn't free the buffers. It just eats and eats. I
> know it's my fault and not nginx' fault. What am I doing wrong?
>
> The response of my php backend could be from 1k to 300mb.
With your settings each connection can allocate up to 20M of
buffers. That is, 1500k connections are enough to allocate 25G of
memory. So the basic question is - how many connections are open?
With pessimistic assumption of 10k connections as per
worker_connections, you configuration will result in more than
200G memory used.
> What is the best setting for my situation?
I would recommend using "fastcgi_max_temp_file_size 0;" if you
want to disable disk buffering (see [1]), and configuring some
reasonable number of reasonably sized fastcgi_buffers. I would
recommend starting tuning with something like 32 x 64k buffers.
[1] http://nginx.org/r/fastcgi_max_temp_file_size
--
Maxim Dounin
http://nginx.org/en/donation.html
More information about the nginx
mailing list