2017-09-12 1 views
1

j'ai un loadbalancer et je reçois cette erreur de genre:nginx LoadBalancer Trop de fichiers ouverts

2017/09/12 11:18:38 [crit] 22348#22348: accept4() failed (24: Too many open files) 
2017/09/12 11:18:38 [alert] 22348#22348: *4288962 socket() failed (24: Too many open files) while connecting to upstream, client: x.x.x.x, server: example.com, request: "GET /xxx.jpg HTTP/1.1", upstream: "http://y.y.y.y:80/xxx.jpg", host: "example.com", referrer: "https://example.com/some-page" 
2017/09/12 11:18:38 [crit] 22348#22348: *4288962 open() "/usr/local/nginx/html/50x.html" failed (24: Too many open files), client: x.x.x.x, server: example.com, request: "GET /xxx.jpg HTTP/1.1", upstream: "http://y.y.y.y:80/xxx.jpg", host: "example.com", referrer: "https://example.com/some-page" 

version nginx: nginx/1.10.1

Os: Debian GNU/Linux 8 (Jessie)

La chose intéressante n'est pas toujours obtenir une erreur. La plupart du temps je reçois 30-50 lignes d'erreurs puis rien en 5-10 minutes. Et puis une fois que les erreurs arrivent encore ...

Voici mon nginx.conf:

user     www-data; 
pid      /usr/local/nginx/nginx.pid; 
worker_processes  auto; 

error_log    /var/log/nginx/error.log; 

events { 
    worker_connections 30000; 
} 

http { 
    include    mime.types; 
    default_type  application/octet-stream; 

    fastcgi_buffers 16 16k; 
    fastcgi_buffer_size 32k; 

    proxy_buffer_size 128k; 
    proxy_buffers 4 256k; 
    proxy_busy_buffers_size 256k; 
    client_max_body_size 500m; 
    rewrite_log on; 

    log_format   main '$remote_addr - "$proxy_add_x_forwarded_for" - [$time_local] "$request" ' 
           '$status $body_bytes_sent "$http_referer" ' 
           '"$http_user_agent" "$backend" ' 
           'rt=$request_time uct="$upstream_connect_time" ' 
           'uht="$upstream_header_time" urt="$upstream_response_time"'; 

    access_log   /var/log/nginx/access.log main; 

    sendfile   on; 
    tcp_nopush   on; 
    tcp_nodelay   on; 
    keepalive_timeout 65; 

    geoip_country /etc/nginx/geodb/GeoIP.dat; 
    geoip_city  /etc/nginx/geodb/GeoLiteCity.dat; 

    include    /etc/nginx/loadbalancer/loadbalancer.conf; 

} 

Et aussi quelques informations:

$ ulimit -Hn 
65536 
$ ulimit -Sn 
65536 
$ sysctl fs.file-nr 
fs.file-nr = 2848 0 70000 

Je ne sais pas si cela vaut la peine mais ce loadbalancer est derrière cloudflare.

+0

Le 'ulimit' que vous vérifiez est probablement pour l'utilisateur root. Vous exécutez les opérateurs 'nginx' comme' www-data', vous devez donc vérifier les ulimits pour cet utilisateur. Essayez d'utiliser 'sudo -u www-data bash -c" ulimit "' –

+0

@TarunLalwani Il est dit: 'unlimited' – MrRP

Répondre

0

J'ai ajouté la ligne suivante à la nginx.conf:

worker_rlimit_nofile 20000; 

Maintenant, cela fonctionne, je ne reçois pas d'erreur puisque la modification.

J'espère que cela aidera quelqu'un s'il a le même problème.