Socket read errors/dropped connections during reload

dmitry.murashenkov nginx-forum at forum.nginx.org
Mon Nov 26 10:58:26 UTC 2018


I've been writing a custom load test that performs nginx reload (with same
actual config) and noticed that sometimes a single connection get's dropped
during reload. The client was in Java, nginx on localhost in Docker under
RHEL 7.5 and about 6k req/sec.

Can somebody comment - if this is expected behavior or possibly
bug/configuration error?

I've managed to dump traffic and find that single request that failed (GET
in packet 14968 fails):
https://drive.google.com/file/d/1I-orMdoZ-zCTiCBFJszWyba2qsO-c1oz/view?usp=sharing

The connection has served several requests at this point already and it goes
like this:
>GET
<200
>GET
<200
>GET
<FIN

Next I've installed nginx on host (Ubuntu 17.10) directly and run wrk
against it, performing single manual reload in the process - got 100 socket
read errors:

$ wrk -t1 -c200 -d10s http://localhost:8080/news/index.html
Running 10s test @ http://localhost:8080/news/index.html
  1 threads and 200 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    33.05ms   56.88ms 230.82ms   83.12%
    Req/Sec    48.53k     4.88k   94.30k    96.00%
  482892 requests in 10.00s, 770.43MB read
  Socket errors: connect 0, read 100, write 0, timeout 0
Requests/sec:  48273.36
Transfer/sec:     77.02MB

I've also tried manually reproduce the case with no luck:

1. Launch nc -l as upstream
2. Send a single curl request to upstream via nginx and let it hang
3. Perform reload
4. Request is still hanging, old workers remain alive, new workers launched
as expected.

During all cases - no errors were logged in error.log, only notice messages
about reload.

----------------- 

Nginx version in "in docker" case:

[root at 89afa6c35cb4 /]# nginx -V
nginx version: nginx/1.14.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx
--modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf
--error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid
--lock-path=/var/run/nginx.lock
--http-client-body-temp-path=/var/cache/nginx/client_temp
--http-proxy-temp-path=/var/cache/nginx/proxy_temp
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp
--http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx
--with-compat --with-file-aio --with-threads --with-http_addition_module
--with-http_auth_request_module --with-http_dav_module
--with-http_flv_module --with-http_gunzip_module
--with-http_gzip_static_module --with-http_mp4_module
--with-http_random_index_module --with-http_realip_module
--with-http_secure_link_module --with-http_slice_module
--with-http_ssl_module --with-http_stub_status_module --with-http_sub_module
--with-http_v2_module --with-mail --with-mail_ssl_module --with-stream
--with-stream_realip_module --with-stream_ssl_module
--with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall
-Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong
--param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC'
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'

[root at 89afa6c35cb4 /]# uname -a
Linux 89afa6c35cb4 4.13.0-46-generic #51-Ubuntu SMP Tue Jun 12 12:36:29 UTC
2018 x86_64 x86_64 x86_64 GNU/Linux

---------------------------

nginx version in "on host" case:

$ nginx -V
nginx version: nginx/1.12.1 (Ubuntu)
built with OpenSSL 1.0.2g  1 Mar 2016
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2
-fdebug-prefix-map=/build/nginx-K5HqCe/nginx-1.12.1=.
-fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time
-D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro
-Wl,-z,now -fPIC' --prefix=/usr/share/nginx
--conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log
--error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock
--pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules
--http-client-body-temp-path=/var/lib/nginx/body
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi
--http-proxy-temp-path=/var/lib/nginx/proxy
--http-scgi-temp-path=/var/lib/nginx/scgi
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit
--with-http_ssl_module --with-http_stub_status_module
--with-http_realip_module --with-http_auth_request_module
--with-http_v2_module --with-http_dav_module --with-http_slice_module
--with-threads --with-http_addition_module --with-http_geoip_module=dynamic
--with-http_gunzip_module --with-http_gzip_static_module
--with-http_image_filter_module=dynamic --with-http_sub_module
--with-http_xslt_module=dynamic --with-stream=dynamic
--with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module

$ uname -a
Linux user-MS-7850 4.13.0-46-generic #51-Ubuntu SMP Tue Jun 12 12:36:29 UTC
2018 x86_64 x86_64 x86_64 GNU/Linux

-------------------------------------------

nginx config in all cases:

worker_processes  1;

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

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    client_max_body_size 2048m;

    access_log  /dev/null;

    sendfile        on;

    keepalive_timeout  65;

    gzip  on;
    gzip_types text/plain text/css application/json application/x-javascript
text/xml application/xml application/xml+rss text/javascript
application/javascript;

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

    server {
        listen 8080 default;
        charset utf-8;

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

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



More information about the nginx mailing list