tcp 0 0 localhost:33839 localhost:9090 ESTABLISHED fga 1833136 28433/telnet
On Tue, Aug 19, 2014 at 8:06 PM, INADA Naoki <[email protected]> wrote: > What is the TCP status for telnet while waiting connection? > If SYN_SENT, telnet has very long connection timeout. > If ESTABLISHED, uWSGI sent ACK for SYN. > > On Wed, Aug 20, 2014 at 7:03 AM, Francois Gaudin <[email protected]> > wrote: > > Thanks for taking the time to help. > > > > Except the strace and the listen queue size, I don't see the difference > with > > what I'm doing so I don't understand what I'm doing wrong. > > > > But basically, are you saying that whatever I do, I won't get a > connection > > refused when the queue is full? Or it may depend on the kernel settings, > > which will either make it timeout after a while or close it right away, > or > > just succeed sometimes as my test shows it? > > > > So here is the new test pretty close to what I was doing: > > > > $ uwsgi --http-socket :9090 --wsgi-file test.py --single-interpreter > > --master --die-on-term --pyhome ~/tmp/testenv --harakiri 55 -l 2 > > > > startup logs: > > > > *** Starting uWSGI 2.0.6 (64bit) on [Tue Aug 19 14:14:15 2014] *** > > compiled with version: 4.8.1 on 18 August 2014 15:19:17 > > os: Linux-3.11.0-20-generic #35-Ubuntu SMP Fri May 2 21:32:49 UTC 2014 > > nodename: ptfga > > machine: x86_64 > > clock source: unix > > detected number of CPU cores: 4 > > current working directory: /home/fga/tmp > > detected binary path: /home/fga/tmp/testenv/bin/uwsgi > > !!! no internal routing support, rebuild with pcre support !!! > > your processes number limit is 30632 > > your memory page size is 4096 bytes > > *** WARNING: you have enabled harakiri without post buffering. Slow > upload > > could be rejected on post-unbuffered webservers *** > > detected max file descriptor number: 1024 > > lock engine: pthread robust mutexes > > thunder lock: disabled (you can enable it with --thunder-lock) > > uwsgi socket 0 bound to TCP address :9090 fd 3 > > Python version: 2.7.5+ (default, Feb 27 2014, 19:40:54) [GCC 4.8.1] > > Set PythonHome to /home/fga/tmp/testenv > > *** Python threads support is disabled. You can enable it with > > --enable-threads *** > > Python main interpreter initialized at 0x1641f80 > > your server socket listen backlog is limited to 2 connections > > your mercy for graceful operations on workers is 60 seconds > > mapped 145536 bytes (142 KB) for 1 cores > > *** Operational MODE: single process *** > > WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x1641f80 > pid: > > 21370 (default app) > > spawned uWSGI master process (pid: 21370) > > spawned uWSGI worker 1 (pid: 21371, cores: 1) > > > > before launching the test, it loops as you said: > > > > $ sudo strace -s 2000 -p 21370 -p 21371 > > Process 21370 attached > > Process 21371 attached > > [pid 21371] epoll_wait(4, <unfinished ...> > > [pid 21370] wait4(-1, 0x7fff65fbd868, WNOHANG, NULL) = 0 > > [pid 21370] epoll_wait(8, {}, 1, 1000) = 0 > > [pid 21370] getsockopt(3, SOL_TCP, TCP_INFO, > > "\n\0\0\0\0\0\0\0@B > \17\0\0\0\0\0\30\2\0\0\0\0\0\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0x\v=\7\0\0\0\0x\v=\7x\v=\7\0\0\0\0\0\0\0\0\0\0\0\0\220\320\3\0\377\377\377\177\n\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", > > [104]) = 0 > > [pid 21370] wait4(-1, 0x7fff65fbd868, WNOHANG, NULL) = 0 > > [pid 21370] epoll_wait(8, {}, 1, 1000) = 0 > > [pid 21370] getsockopt(3, SOL_TCP, TCP_INFO, > > "\n\0\0\0\0\0\0\0@B > \17\0\0\0\0\0\30\2\0\0\0\0\0\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\17=\7\0\0\0\0`\17=\7`\17=\7\0\0\0\0\0\0\0\0\0\0\0\0\220\320\3\0\377\377\377\177\n\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", > > [104]) = 0 > > [pid 21370] wait4(-1, 0x7fff65fbd868, WNOHANG, NULL) = 0 > > [pid 21370] epoll_wait(8, {}, 1, 1000) = 0 > > [pid 21370] getsockopt(3, SOL_TCP, TCP_INFO, > > "\n\0\0\0\0\0\0\0@B > \17\0\0\0\0\0\30\2\0\0\0\0\0\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0H\23=\7\0\0\0\0H\23=\7H\23=\7\0\0\0\0\0\0\0\0\0\0\0\0\220\320\3\0\377\377\377\177\n\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", > > [104]) = 0 > > > > my test script is now: > > > > import time, random > > > > def application(env, start_response): > > thread_id = random.randint(1, 1000) > > start_response('200 OK', [('Content-Type','text/html')]) > > for i in range(10): > > print 'sleeping (%d)' % (thread_id) > > time.sleep(5) > > return ["Hello World (%d)" % (thread_id)] > > > > Launching 11 curl requests in parallel, logs show: > > > > sleeping (302) > > Tue Aug 19 14:21:30 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (3/2) *** > > Tue Aug 19 14:21:31 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (3/2) *** > > Tue Aug 19 14:21:32 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (3/2) *** > > sleeping (302) > > Tue Aug 19 14:21:33 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (3/2) *** > > Tue Aug 19 14:21:34 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (3/2) *** > > Tue Aug 19 14:21:35 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (3/2) *** > > Tue Aug 19 14:21:36 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (3/2) *** > > Tue Aug 19 14:21:37 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (3/2) *** > > sleeping (302) > > Tue Aug 19 14:21:38 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (3/2) *** > > Tue Aug 19 14:21:39 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (3/2) *** > > Tue Aug 19 14:21:40 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (3/2) *** > > Tue Aug 19 14:21:41 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (3/2) *** > > Tue Aug 19 14:21:42 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (3/2) *** > > [ ... ] > > Tue Aug 19 14:22:15 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (3/2) *** > > Tue Aug 19 14:22:16 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (3/2) *** > > Tue Aug 19 14:22:17 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (3/2) *** > > [pid: 21371|app: 0|req: 1/1] 127.0.0.1 () {24 vars in 247 bytes} [Tue > Aug 19 > > 14:21:28 2014] GET / => generated 17 bytes in 50047 msecs (HTTP/1.1 200) > 1 > > headers in 44 bytes (1 switches on core 0) > > sleeping (63) > > Tue Aug 19 14:22:18 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (2/2) *** > > Tue Aug 19 14:22:19 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (2/2) *** > > Tue Aug 19 14:22:20 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (2/2) *** > > Tue Aug 19 14:22:21 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (2/2) *** > > Tue Aug 19 14:22:22 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (2/2) *** > > sleeping (63) > > Tue Aug 19 14:22:23 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (2/2) *** > > Tue Aug 19 14:22:24 2014 - *** uWSGI listen queue of socket ":9090" (fd: > 3) > > full !!! (2/2) *** > > > > > > When I do the telnet, I don't notice anything: > > > > pid 21370] wait4(-1, 0x7fff65fbd868, WNOHANG, NULL) = 0 > > [pid 21370] epoll_wait(8, {}, 1, 1000) = 0 > > [pid 21370] getsockopt(3, SOL_TCP, TCP_INFO, > > "\n\0\0\0\0\0\0\0@B > \17\0\0\0\0\0\30\2\0\0\0\0\0\0\3\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0T\375J\7\0\0\0\0T\375J\7T\375J\7\0\0\0\0\0\0\0\0\0\0\0\0\220\320\3\0\377\377\377\177\n\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", > > [104]) = 0 > > [pid 21370] write(2, "Tue Aug 19 14:34:19 2014 - *** uWSGI listen queue > of > > socket \":9090\" (fd: 3) full !!! (3/2) ***\n", 95) = 95 > > [pid 21370] wait4(-1, 0x7fff65fbd868, WNOHANG, NULL) = 0 > > [pid 21370] epoll_wait(8, <unfinished ...> > > [pid 21371] <... select resumed> ) = 0 (Timeout) > > [pid 21371] write(1, "sleeping (14)\n", 14) = 14 > > [pid 21371] select(0, NULL, NULL, NULL, {5, 0} <unfinished ...> > > [pid 21370] <... epoll_wait resumed> {}, 1, 1000) = 0 > > [pid 21370] getsockopt(3, SOL_TCP, TCP_INFO, > > "\n\0\0\0\0\0\0\0@B > \17\0\0\0\0\0\30\2\0\0\0\0\0\0\3\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<\1K\7\0\0\0\0<\1K\7<\1K\7\0\0\0\0\0\0\0\0\0\0\0\0\220\320\3\0\377\377\377\177\n\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", > > [104]) = 0 > > [pid 21370] write(2, "Tue Aug 19 14:34:20 2014 - *** uWSGI listen queue > of > > socket \":9090\" (fd: 3) full !!! (3/2) ***\n", 95) = 95 > > [pid 21370] wait4(-1, 0x7fff65fbd868, WNOHANG, NULL) = 0 > > [pid 21370] epoll_wait(8, {}, 1, 1000) = 0 > > [pid 21370] getsockopt(3, SOL_TCP, TCP_INFO, > > "\n\0\0\0\0\0\0\0@B > \17\0\0\0\0\0\30\2\0\0\0\0\0\0\3\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0$\5K\7\0\0\0\0$\5K\7$\5K\7\0\0\0\0\0\0\0\0\0\0\0\0\220\320\3\0\377\377\377\177\n\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", > > [104]) = 0 > > [pid 21370] write(2, "Tue Aug 19 14:34:21 2014 - *** uWSGI listen queue > of > > socket \":9090\" (fd: 3) full !!! (3/2) ***\n", 95) = 95 > > [pid 21370] wait4(-1, 0x7fff65fbd868, WNOHANG, NULL) = 0 > > [pid 21370] epoll_wait(8, {}, 1, 1000) = 0 > > [pid 21370] getsockopt(3, SOL_TCP, TCP_INFO, > > "\n\0\0\0\0\0\0\0@B > \17\0\0\0\0\0\30\2\0\0\0\0\0\0\3\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\tK\7\0\0\0\0\20\tK\7\20\tK\7\0\0\0\0\0\0\0\0\0\0\0\0\220\320\3\0\377\377\377\177\n\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", > > [104]) = 0 > > [pid 21370] write(2, "Tue Aug 19 14:34:22 2014 - *** uWSGI listen queue > of > > socket \":9090\" (fd: 3) full !!! (3/2) ***\n", 95) = 95 > > [pid 21370] wait4(-1, 0x7fff65fbd868, WNOHANG, NULL) = 0 > > [pid 21370] epoll_wait(8, {}, 1, 1000) = 0 > > [pid 21370] getsockopt(3, SOL_TCP, TCP_INFO, > > "\n\0\0\0\0\0\0\0@B > \17\0\0\0\0\0\30\2\0\0\0\0\0\0\3\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\fK\7\0\0\0\0\370\fK\7\370\fK\7\0\0\0\0\0\0\0\0\0\0\0\0\220\320\3\0\377\377\377\177\n\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", > > [104]) = 0 > > [pid 21370] write(2, "Tue Aug 19 14:34:23 2014 - *** uWSGI listen queue > of > > socket \":9090\" (fd: 3) full !!! (3/2) ***\n", 95) = 95 > > [pid 21370] wait4(-1, 0x7fff65fbd868, WNOHANG, NULL) = 0 > > [pid 21370] epoll_wait(8, {}, 1, 1000) = 0 > > [pid 21370] getsockopt(3, SOL_TCP, TCP_INFO, > > "\n\0\0\0\0\0\0\0@B > \17\0\0\0\0\0\30\2\0\0\0\0\0\0\3\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\20K\7\0\0\0\0\340\20K\7\340\20K\7\0\0\0\0\0\0\0\0\0\0\0\0\220\320\3\0\377\377\377\177\n\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", > > [104]) = 0 > > [pid 21370] write(2, "Tue Aug 19 14:34:24 2014 - *** uWSGI listen queue > of > > socket \":9090\" (fd: 3) full !!! (3/2) ***\n", 95) = 95 > > [pid 21370] wait4(-1, 0x7fff65fbd868, WNOHANG, NULL) = 0 > > [pid 21370] epoll_wait(8, <unfinished ...> > > [pid 21371] <... select resumed> ) = 0 (Timeout) > > [pid 21371] write(1, "sleeping (14)\n", 14) = 14 > > [pid 21371] select(0, NULL, NULL, NULL, {5, 0} <unfinished ...> > > [pid 21370] <... epoll_wait resumed> {}, 1, 1000) = 0 > > [pid 21370] getsockopt(3, SOL_TCP, TCP_INFO, > > "\n\0\0\0\0\0\0\0@B > \17\0\0\0\0\0\30\2\0\0\0\0\0\0\3\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\24K\7\0\0\0\0\310\24K\7\310\24K\7\0\0\0\0\0\0\0\0\0\0\0\0\220\320\3\0\377\377\377\177\n\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", > > [104]) = 0 > > [pid 21370] write(2, "Tue Aug 19 14:34:25 2014 - *** uWSGI listen queue > of > > socket \":9090\" (fd: 3) full !!! (3/2) ***\n", 95) = 95 > > [pid 21370] wait4(-1, 0x7fff65fbd868, WNOHANG, NULL) = 0 > > [pid 21370] epoll_wait(8, {}, 1, 1000) = 0 > > [pid 21370] getsockopt(3, SOL_TCP, TCP_INFO, > > "\n\0\0\0\0\0\0\0@B > \17\0\0\0\0\0\30\2\0\0\0\0\0\0\3\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\264\30K\7\0\0\0\0\264\30K\7\264\30K\7\0\0\0\0\0\0\0\0\0\0\0\0\220\320\3\0\377\377\377\177\n\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", > > [104]) = 0 > > [pid 21370] write(2, "Tue Aug 19 14:34:26 2014 - *** uWSGI listen queue > of > > socket \":9090\" (fd: 3) full !!! (3/2) ***\n", 95) = 95 > > [pid 21370] wait4(-1, 0x7fff65fbd868, WNOHANG, NULL) = 0 > > [pid 21370] epoll_wait(8, {}, 1, 1000) = 0 > > [pid 21370] getsockopt(3, SOL_TCP, TCP_INFO, > > "\n\0\0\0\0\0\0\0@B > \17\0\0\0\0\0\30\2\0\0\0\0\0\0\3\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\234\34K\7\0\0\0\0\234\34K\7\234\34K\7\0\0\0\0\0\0\0\0\0\0\0\0\220\320\3\0\377\377\377\177\n\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", > > [104]) = 0 > > [pid 21370] write(2, "Tue Aug 19 14:34:27 2014 - *** uWSGI listen queue > of > > socket \":9090\" (fd: 3) full !!! (3/2) ***\n", 95) = 95 > > [pid 21370] wait4(-1, 0x7fff65fbd868, WNOHANG, NULL) = 0 > > > > Then at some point, it accepts the telnet connection: > > > > [pid 21371] epoll_wait(4, {{EPOLLIN, {u32=3, u64=3}}}, 1, -1) = 1 > > [pid 21371] accept4(3, {sa_family=AF_INET, sin_port=htons(59113), > > sin_addr=inet_addr("127.0.0.1")}, [16], SOCK_NONBLOCK) = 6 > > [pid 21371] read(6, "GET /test HTTP/1.1\r\n\r\n", 4096) = 22 > > [pid 21371] write(1, "sleeping (43)\n", 14) = 14 > > [pid 21371] select(0, NULL, NULL, NULL, {5, 0} <unfinished ...> > > [pid 21370] <... epoll_wait resumed> {}, 1, 1000) = 0 > > [pid 21370] getsockopt(3, SOL_TCP, TCP_INFO, > > "\n\0\0\0\0\0\0\0@B > \17\0\0\0\0\0\30\2\0\0\0\0\0\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\270\206M\7\0\0\0\0\270\206M\7\270\206M\7\0\0\0\0\0\0\0\0\0\0\0\0\220\320\3\0\377\377\377\177\n\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", > > [104]) = 0 > > [pid 21370] wait4(-1, 0x7fff65fbd868, WNOHANG, NULL) = 0 > > [pid 21370] epoll_wait(8, {}, 1, 1000) = 0 > > > > > > Eventually, the telnet request returned, successfully this time: > > > > time telnet localhost 9090 > > Trying 127.0.0.1... > > Connected to localhost. > > Escape character is '^]'. > > GET /test HTTP/1.1 > > > > HTTP/1.1 200 OK > > Content-Type: text/html > > > > Hello World (43)Connection closed by foreign host. > > > > real 3m49.293s > > user 0m0.002s > > sys 0m0.003s > > > > > > [pid 21370] wait4(-1, 0x7fff65fbd868, WNOHANG, NULL) = 0 > > [pid 21370] epoll_wait(8, {}, 1, 1000) = 0 > > [pid 21370] getsockopt(3, SOL_TCP, TCP_INFO, > > "\n\0\0\0\0\0\0\0@B > \17\0\0\0\0\0\30\2\0\0\0\0\0\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dFN\7\0\0\0\0dFN\7dFN\7\0\0\0\0\0\0\0\0\0\0\0\0\220\320\3\0\377\377\377\177\n\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", > > [104]) = 0 > > [pid 21370] wait4(-1, 0x7fff65fbd868, WNOHANG, NULL) = 0 > > [pid 21370] epoll_wait(8, <unfinished ...> > > [pid 21371] <... select resumed> ) = 0 (Timeout) > > [pid 21371] writev(6, [{"HTTP/1.1 200 OK\r\nContent-Type: > > text/html\r\n\r\n", 44}, {"Hello World (43)", 16}], 2) = 60 > > [pid 21371] close(6) = 0 > > [pid 21371] writev(2, [{"[pid: 21371|app: 0|req: 9/9] 127.0.0.1 () {18 > vars > > in 180 bytes} [Tue Aug 19 14:37:04 2014] GET /test => generated 16 bytes > in > > 50032 msecs (HTTP/1.1 200) 1 headers in 44 bytes (1 switches on core > 0)\n", > > 199}], 1) = 199 > > [pid 21371] epoll_wait(4, <unfinished ...> > > [pid 21370] <... epoll_wait resumed> {}, 1, 1000) = 0 > > [pid 21370] getsockopt(3, SOL_TCP, TCP_INFO, > > "\n\0\0\0\0\0\0\0@B > \17\0\0\0\0\0\30\2\0\0\0\0\0\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0PJN\7\0\0\0\0PJN\7PJN\7\0\0\0\0\0\0\0\0\0\0\0\0\220\320\3\0\377\377\377\177\n\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", > > [104]) = 0 > > [pid 21370] wait4(-1, 0x7fff65fbd868, WNOHANG, NULL) = 0 > > [pid 21370] epoll_wait(8, {}, 1, 1000) = 0 > > [pid 21370] getsockopt(3, SOL_TCP, TCP_INFO, > > "\n\0\0\0\0\0\0\0@B > \17\0\0\0\0\0\30\2\0\0\0\0\0\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0008NN\7\0\0\0\0008NN\0078NN\7\0\0\0\0\0\0\0\0\0\0\0\0\220\320\3\0\377\377\377\177\n\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", > > [104]) = 0 > > [pid 21370] wait4(-1, 0x7fff65fbd868, WNOHANG, NULL) = 0 > > > > > > > > On Tue, Aug 19, 2014 at 12:47 PM, Roberto De Ioris <[email protected]> > wrote: > >> > >> > >> > My bad, we use http-socket in prod and for some reason I put http > >> > locally > >> > and checked only our prod settings. > >> > > >> > Try again... > >> > > >> > With no-defer-accept: > >> > > >> > $ uwsgi --http-socket :9090 --wsgi-file test.py --single-interpreter > >> > --master --die-on-term --enable-threads --pyhome ~/tmp/testenv > >> > --harakiri > >> > 28 -l 3 --no-defer-accept > >> > > >> > $ time telnet localhost 9090 > >> > Trying 127.0.0.1... > >> > Connected to localhost. > >> > Escape character is '^]'. > >> > GET /test HTTP/1.1 > >> > > >> > HTTP/1.1 200 OK > >> > Content-Type: text/html > >> > > >> > Hello WorldConnection closed by foreign host. > >> > > >> > real 2m22.434s > >> > user 0m0.003s > >> > sys 0m0.006s > >> > > >> > All requests responded (waiting as long as necessary) except one which > >> > ended with: > >> > > >> > curl: (56) Recv failure: Connection reset by peer > >> > > >> > after 1min46 > >> > > >> > > >> > Without --no-defer-accept: > >> > > >> > $ uwsgi --http-socket :9090 --wsgi-file test.py --single-interpreter > >> > --master --die-on-term --enable-threads --pyhome ~/tmp/testenv > >> > --harakiri > >> > 28 -l 3 > >> > > >> > $ time telnet localhost 9090 > >> > Trying 127.0.0.1... > >> > Connected to localhost. > >> > Escape character is '^]'. > >> > GET /test HTTP/1.1 > >> > > >> > Connection closed by foreign host. > >> > > >> > real 1m17.867s > >> > user 0m0.000s > >> > sys 0m0.008s > >> > > >> > and worked another time: > >> > > >> > $ time telnet localhost 9090 > >> > Trying 127.0.0.1... > >> > Connected to localhost. > >> > Escape character is '^]'. > >> > GET /test HTTP/1.1 > >> > > >> > HTTP/1.1 200 OK > >> > Content-Type: text/html > >> > > >> > Hello WorldConnection closed by foreign host. > >> > > >> > real 1m59.701s > >> > user 0m0.000s > >> > sys 0m0.004s > >> > > >> > > >> > So either way, uwsgi still accepts the connection. > >> > > >> > > >> > >> I fear you are testing in the wrong way. What you describe is basically > >> impossible, event with defer-accept the amount of manageable connections > >> is always limited (by the kernel memory). > >> > >> With defer-accept you tell the kernel to pass the request to the socket > >> until a packet arrives, without defer-accept the connection (if there > are > >> slots in the listen queue) the request is passed to the socket and first > >> free worker accept() it. > >> > >> Best way, would be attaching a strace to the worker before running the > >> test (in uWSGI only workers accept() requests, there is no arbitrer or > >> similar, unless you add a proxy) > >> > >> You should: > >> > >> spawn a single worker with --http-socket and listen queue of 2 and > strace > >> it, open at least 10 curl requests (the listen queue size is not precise > >> for various reasons, there are generally a couple more slots allocated) > to > >> the app (the should generate a loop). Open a telnet session, without > >> defer-accept the connection should timeout or close (based on kernel > >> settings) > >> > >> -- > >> Roberto De Ioris > >> http://unbit.it > >> _______________________________________________ > >> uWSGI mailing list > >> [email protected] > >> http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi > > > > > > > > > > -- > > Francois > > > > _______________________________________________ > > uWSGI mailing list > > [email protected] > > http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi > > > > > > -- > INADA Naoki <[email protected]> > _______________________________________________ > uWSGI mailing list > [email protected] > http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi > -- Francois
_______________________________________________ uWSGI mailing list [email protected] http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi
