openresty / openresty/lua-resty-redis

Nginx creates more connection than poolsize, backlog to redis

Open
#265 5 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Lua
Stars
2k
Forks
447
Avg merge
2h 24m
Merged PRs (30d)
3

Description

I am using https://github.com/openresty/lua-resty-redis#connect method and keepalive()
i have kept pool size to 200 and backlog 20, Still it creates 2000 connections to redis during a load test.
is_connected, err = client:connect(REDIS_SERVER1,REDIS_PORT,{ pool_size = 200, backlog = 10})

ngx-lua : 5.1
workers : 2

What could be the reason for more number of connection from nginx to redis ? How can we control or restrict it ?

Used Nginx conf

user              www-data;
worker_processes  2;
worker_rlimit_nofile  10240;

include /etc/nginx/modules-enabled/*.conf;

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

events {
  worker_connections  10240;
  multi_accept  on;
  use epoll;
 }
 http {
  
    server_tokens       off;

    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    root        /srv/www/default;

    sendfile    on;
    tcp_nopush  on;
    tcp_nodelay on;

    keepalive_timeout   120;
    keepalive_requests  1000;
    reset_timedout_connection on;

    server_names_hash_bucket_size 128;
    types_hash_max_size 2048;
    types_hash_bucket_size  64;

    open_file_cache max=200000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;

    client_body_timeout   5;
    client_header_timeout 5;
    client_header_buffer_size 256;
    client_max_body_size  16m;

    ##
    # Gzip Settings
    ##

    gzip            on;
    gzip_http_version 1.0;
    gzip_buffers    4 16k;
    gzip_min_length 1024;
    gzip_comp_level 2;
    gzip_proxied    expired no-cache no-store private auth;
    gzip_types      text/plain text/css text/javascript application/javascript application/x-javascript text/xml application/xml application/xml+rss application/json;
    gzip_disable    "MSIE [1-6]\.(?!.*SV1)";

    set_real_ip_from    10.8.0.0/16;
    real_ip_header      X-Forwarded-For;
    real_ip_recursive   on;

    include /etc/nginx/conf.d/*.conf;

    

    # proxy settings
    proxy_buffer_size       16k;
    proxy_buffers           8   16k;
    proxy_connect_timeout   60s;
    proxy_send_timeout      60s;
    proxy_read_timeout      60s;

    # local log
    access_log  /var/log/nginx/$host.access.log ltsv;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/sites-enabled/*;
 }

Steps To Reproduce:

  1. Take a 2 core CPU machine
  2. Use resty.redis lua
  3. configure poolsize 200 and backlog 10
  4. Do a stress test to generate 1000 req/s to nginx.
  5. check the connected clients in redis to verify
  6. check netstat | grep '6379' to check open connections.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the lua-resty-redis connect() and keepalive() documentation and the reported pool_size/backlog configuration. Reproduce the 1,000 requests-per-second load described, then compare Redis connected clients with netstat on the two-worker Nginx setup. Done means identifying whether the observed connections match documented pooling behavior and documenting or fixing a reproducible cause.

Written by the indexing model from the issue text.

Assessment

Tech stack
lua, nginx, redis
Domain
backend, databases, networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
28/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.