On Mon, 5 Oct 2015 21:04:08 +0200 PiBa-NL <piba.nl....@gmail.com> wrote:
> Hi Thierry, Hi Pieter, > With or without "option http-server-close" does not seem to make any > difference. Sure, it is only an answer to the Cyril keep alive problem. I encounter again the keepalive problem :( The HAProxy applet (services) can't directly uses the keepalive. The service send its response with an "internal" connection: close. If you activate the debug, you will see the header "connection: close". You must configure HAProxy to use keepalive between the frontend and the client. > Adding a empty backend does seem to resolve the problem, stats also show > the backend handling connections and tracking its 2xx http result > session totals when configured like this.: > > frontend http_frt > mode http > bind :801 > http-request use-service lua.hello-world > default_backend http-lua-service > backend http-lua-service > mode http I can't reproduce the problem with the last dev version. But, I regognize the backtrace, I already encounter the same. I'm believe that is fixed in the dev6 :( I try to bench with my http injector, and I try with ab with and without keep alive. I try also to stress the admin page, and I can't reproduce pthe problem. Argg, I see a major difference: to use freebsd. I don't have the environment for testing it. I must install a VM. > Op 5-10-2015 om 16:06 schreef Thierry FOURNIER: > > Hi, > > > > I process this email later. For waiting, I propose to you to set the > > "option http-server-close". Actually, the "services" doesn't support > > itself the keepalive, but HAProxy does this job. > > > > The "option http-server-close" expectes a server-close from the service > > stream. The front of HAProxy maintains the keep-alive between the > > client and the haproxy. > > > > This method embbed a limitation: if some servers are declared in the > > backend, the "option http-server-close" forbid the keepalive between > > haproxy and the serveur. > > > > Can you test with this option ? > > > > Thierry > > > > > > > > On Thu, 1 Oct 2015 23:00:45 +0200 > > Cyril Bonté <cyril.bo...@free.fr> wrote: > > > >> Hi, > >> > >> Le 01/10/2015 20:52, PiBa-NL a écrit : > >>> Hi List, > >>> > >>> With the config below while running 'siege' i get a core dump within a > >>> few hundreds of requests.. Viewing the stats page from a chrome browser > >>> while siege is running seems to crash it sooner.. > >>> > >>> Is below enough to find the cause? Anything else i should try? > >> This is embarrassing because with your configuration, I currently can't > >> reproduce a segfault but I can reproduce another issue with HTTP > >> keep-alive requests ! > >> > >> (details below) > >> > >>> Using the haproxy snapshot from: 1.6-dev6 ss-20150930 > >>> Or perhaps i just did compile it wrong?.. > >>> make NO_CHECKSUM=yes clean debug=1 reinstall WITH_DEBUG=yes > >>> > >>> global > >>> stats socket /tmp/hap.socket level admin > >>> maxconn 60000 > >>> lua-load /haproxy/brute/hello.lua > >>> > >>> defaults > >>> timeout client 10000 > >>> timeout connect 10000 > >>> timeout server 10000 > >>> > >>> frontend HAProxyLocalStats > >>> bind :2300 name localstats > >>> mode http > >>> stats enable > >>> stats refresh 1000 > >>> stats admin if TRUE > >>> stats uri / > >>> frontend http_frt > >>> bind :801 > >>> mode http > >>> http-request use-service lua.hello-world > >> Here, if I use : > >> $ ab -n100 -c1 -k http://127.0.0.1:801/ > >> There will be a 10000ms delay after the first request. > >> > >> Or with another test case : > >> echo -ne "GET / HTTP/1.1\r\nHost: localhost\r\n\r\nGET / > >> HTTP/1.1\r\nHost: localhost\r\n\r\n"| nc localhost 801 > >> HTTP/1.1 200 OK > >> content-type: text/plain > >> Transfer-encoding: chunked > >> > >> d > >> Hello World ! > >> 0 > >> > >> => only 1 response > >> > >> Now, if I change "frontend http_frt" to "listen http_frt", I get the > >> awaited behaviour. > >> > >> The second test case with "listen" : > >> echo -ne "GET / HTTP/1.1\r\nHost: localhost\r\n\r\nGET / > >> HTTP/1.1\r\nHost: localhost\r\n\r\n"| nc localhost 801 > >> HTTP/1.1 200 OK > >> content-type: text/plain > >> Transfer-encoding: chunked > >> > >> d > >> Hello World ! > >> 0 > >> > >> HTTP/1.1 200 OK > >> content-type: text/plain > >> Transfer-encoding: chunked > >> > >> d > >> Hello World ! > >> 0 > >> > >> => the 2 responses are returned > >> > >>> core.register_service("hello-world", "http", function(applet) > >>> local response = "Hello World !" > >>> applet:set_status(200) > >>> applet:add_header("content-type", "text/plain") > >>> applet:start_response() > >>> applet:send(response) > >>> end ) > >>> > >>> (gdb) bt full > >>> #0 0x0000000801a2da75 in memcpy () from /lib/libc.so.7 > >>> No symbol table info available. > >>> #1 0x0000000000417388 in buffer_slow_realign (buf=0x7d3c90) at > >>> src/buffer.c:166 > >>> block1 = -3306 > >>> block2 = 0 > >>> #2 0x0000000000480c42 in http_wait_for_request (s=0x80247d600, > >>> req=0x80247d610, an_bit=4) > >>> at src/proto_http.c:2686 > >>> cur_idx = -6336 > >>> sess = (struct session *) 0x80241e400 > >>> txn = (struct http_txn *) 0x802bb2140 > >>> msg = (struct http_msg *) 0x802bb21a0 > >>> ctx = {line = 0x2711079 <Address 0x2711079 out of bounds>, idx > >>> = 3, val = 0, vlen = 7, tws = 0, > >>> del = 33, prev = 0} > >>> #3 0x00000000004d55b1 in process_stream (t=0x80244b390) at > >>> src/stream.c:1759 > >>> max_loops = 199 > >>> ana_list = 52 > >>> ana_back = 52 > >>> flags = 4227584 > >>> srv = (struct server *) 0x0 > >>> s = (struct stream *) 0x80247d600 > >>> sess = (struct session *) 0x80241e400 > >>> rqf_last = 8397312 > >>> rpf_last = 2248179715 > >>> rq_prod_last = 7 > >>> rq_cons_last = 9 > >>> rp_cons_last = 7 > >>> rp_prod_last = 0 > >>> req_ana_back = 8192 > >>> req = (struct channel *) 0x80247d610 > >>> res = (struct channel *) 0x80247d650 > >>> si_f = (struct stream_interface *) 0x80247d7f8 > >>> si_b = (struct stream_interface *) 0x80247d818 > >>> #4 0x000000000041fe78 in process_runnable_tasks () at src/task.c:238 > >>> t = (struct task *) 0x80244b390 > >>> max_processed = 0 > >>> #5 0x000000000040cc4e in run_poll_loop () at src/haproxy.c:1539 > >>> next = 549107027 > >>> #6 0x000000000040daee in main (argc=4, argv=0x7fffffffeaf0) at > >>> src/haproxy.c:1892 > >>> err = 0 > >>> retry = 200 > >>> limit = {rlim_cur = 120032, rlim_max = 120032} > >>> errmsg = > >>> "\000êÿÿÿ\177\000\000\030ëÿÿÿ\177\000\000ðêÿÿÿ\177\000\000\004\000\000\000\000\000\000\000Ðêÿÿÿ\177\000\000]A}\000\b\000\000\000pêÿÿÿ\177\000\000\000\000\000\000\000\000\000\000èêÿÿÿ\177\000\000\030ëÿÿÿ\177\000\000ðêÿÿÿ\177\000\000\004\000\000\000\000\000\000\000\220êÿÿ" > >>> > >>> pidfd = -1 > >>> > >>> # haproxy -vv > >>> [ALERT] 273/021153 (10691) : SSLv3 support requested but unavailable. > >>> HA-Proxy version 1.6-dev6-10770fa 2015/09/29 > >>> Copyright 2000-2015 Willy Tarreau <wi...@haproxy.org> > >>> > >>> Build options : > >>> TARGET = freebsd > >>> CPU = generic > >>> CC = cc > >>> CFLAGS = -pipe -g -fstack-protector -fno-strict-aliasing > >>> -DFREEBSD_PORTS > >>> OPTIONS = USE_GETADDRINFO=1 USE_ZLIB=1 USE_OPENSSL=1 USE_LUA=1 > >>> USE_STATIC_PCRE=1 USE_PCRE_JIT=1 > >>> > >>> Default settings : > >>> maxconn = 2000, bufsize = 16384, maxrewrite = 1024, maxpollevents = > >>> 200 > >>> > >>> Encrypted password support via crypt(3): yes > >>> Built with zlib version : 1.2.8 > >>> Compression algorithms supported : identity("identity"), > >>> deflate("deflate"), raw-deflate("deflate"), gzip("gzip") > >>> Built with OpenSSL version : OpenSSL 1.0.2d 9 Jul 2015 > >>> Running on OpenSSL version : OpenSSL 1.0.2d 9 Jul 2015 > >>> OpenSSL library supports TLS extensions : yes > >>> OpenSSL library supports SNI : yes > >>> OpenSSL library supports prefer-server-ciphers : yes > >>> Built with PCRE version : 8.37 2015-04-28 > >>> PCRE library supports JIT : yes > >>> Built with Lua version : Lua 5.3.0 > >>> Built with transparent proxy support using: IP_BINDANY IPV6_BINDANY > >>> > >>> Available polling systems : > >>> kqueue : pref=300, test result OK > >>> poll : pref=200, test result OK > >>> select : pref=150, test result OK > >>> Total: 3 (3 usable), will use kqueue. > >>> > >>> > >>> > >>> > >> > >> -- > >> Cyril Bonté > >> > >