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é