High memory usage

bvek1 nginx-forum at forum.nginx.org
Wed Oct 23 13:54:25 UTC 2019


Hello,

I need your help, I have a problem with my Nginx server : all the Nginx
processes are consuming a huge amount of memory and it sets off the OOM
Killer.
I don't understand why Nginx uses this much memory, it seems odd, I expected
the CPU to be the first problem instead of memory.

My Nginx server is just a reverse proxy, to all kind of backend. SSL can be
offloaded or not, it depends on the backend.

I have a huge amount of vhosts with SSL on this Nginx (~15K) and the server
have a lot of trafic (for me at least !) . 
The /stub_status tell me the following thing at this moment : 

Active connections: 3867 
server accepts handled requests
 2350039 2350039 5489648 
Reading: 0 Writing: 332 Waiting: 3605

Netdata (https://github.com/netdata/netdata) tell me that it handle between
300 and 600 req/s. 

[root at nginxsrv nginx]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core) 

[root at nginxsrv nginx]# nginx -V
nginx version: nginx/1.17.3
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) 
built with OpenSSL 1.1.0k  28 May 2019
TLS SNI support enabled
configure arguments: --add-module=/usr/local/src/ngx_brotli
--add-module=/usr/local/src/kyprizel-testcookie-nginx-module 
--with-threads --with-openssl=/usr/local/src/openssl --with-http_v2_module
--with-http_flv_module --with-ipv6 --with-http_mp4_module 
--sbin-path=/usr/local/sbin --conf-path=/etc/nginx/nginx.conf
--pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx/error.log 
--http-log-path=/var/log/nginx/access.log --with-http_realip_module
--with-http_ssl_module --http-client-body-temp-path=/eacc/nginx_client 
--http-proxy-temp-path=/eacc/nginx_proxy
--http-fastcgi-temp-path=/eacc/nginx_fastcgi --with-http_stub_status_module

The server have a lot of ram, 120G and the CPU is an Intel Xeon E5-2697 CPU.
The CPU is not used that much.

A typical vhost file is quite simple, it's just a proxy_pass to a backend,
with some hack to do a retry is we first get and error message (based on
proxy_intercept_errors). http2 is on. I don't use any caches. 

Things I have tested or I suspect to be an issue : 
- I reduced the worker_processes to 6. I had issue with the frequent
reloading of Nginx with an upper value. I suspect that it's more difficult
for Nginx to reload properly if a lot of processes are spawned (correct me
if i'm wrong)
- I have gzip on and gzip_proxied to any. I suspect the compression to be an
issue, I reduced the buffers value to gzip_buffers  32 4k; and
gzip_comp_level to 1
- I reduced the ssl_session_cache from 10m to 1m
- I reduced the keep_alive timeout too (30)
- Reloading Nginx often seems to be a problem too, the memory usage seems
higher during the reloading task. The reloading is quite slow too, probably
because of the number of vhosts file to load (if someone know how to speed
up this, it interest me !)
- I have a lot of limit_conn configuration
- ssl_stapling is off, I had issue with it with the DNS resolution.

Do you have idea on what can cause a high memory usage on Nginx ?

Thanks,
Alexis

Posted at Nginx Forum: https://forum.nginx.org/read.php?2,285979,285979#msg-285979



More information about the nginx mailing list