Hello James,

2016-08-02 4:35 GMT+02:00 James Hartshorn <[email protected]>:

> Hi, We’re running into segmentation faults on a new haproxy system we’re
> developing.  We’ve been building haproxy 1.6.7 on ubuntu 14.04.5 with
> openssl,pcre, and zlib.  The problem doesn’t manifest when running a single
> process.  Load testing is approximately 1gbps of ssl traffic from four test
> servers on the internet, there are two backend servers handling it.  It
> seems that only processes assigned to handle the traffic die and only under
> load.  We have tried with Pthreads and Mutex off, but the problem remained.
>  In the config listed below I have omitted some other front/backends for
> brevity, they are unused at present and are very simple (no ssl, no process
> assignments).
>


>
> Segmentation fault is as:
>
> [592869.807299] haproxy[31045]: segfault at 7f02cfca88e8 ip
> 00007f02cf971eee sp 00007ffe1380d4a8 error 4 in libc-2.19.so
> [7f02cf8da000+1ba000]
>

Can you get the coredump when it happens ? You can get it like this :
ulimit -c unlimited
echo '/tmp/coredump-%e.%p' > /proc/sys/kernel/core_pattern
haproxy -f /your/config/file.cfg

Then wait for crash to happen.

Then, see coredump file in /tmp ; you can get the backtrace details like
this :
gdb /usr/bin/haproxy /tmp/coredump***
> bt
> bt full

This will give extra informations that will be very useful.


Olivier



>
> Kernel is:  "Linux hap01 3.13.0-92-generic #139-Ubuntu SMP Tue Jun 28
> 20:42:26 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux”, Cpu is a single E5-2650
> v3, nic is an Intel X710 with i40e driver version 1.5.16
>
> We are running nbproc, relevant config sections:
>
> **************
> global
>   daemon
>   ssl-server-verify none
>   log /dev/log local0 info
> #  log /dev/log local1 debug
> #  user haproxy
> #  group haproxy
>
>         spread-checks 50
>         #maxpipes 64000
>         tune.idletimer 0
>         #tune.maxpollevents 1
>         #tune.comp.maxlevel 9
>         #tune.zlib.memlevel 9
>         stats socket /run/haproxy/stats1 uid 0 gid 0 mode 0777 level user
> process 1
>         stats socket /run/haproxy/stats2 uid 0 gid 0 mode 0777 level user
> process 2
>         stats socket /run/haproxy/stats3 uid 0 gid 0 mode 0777 level user
> process 3
>         stats socket /run/haproxy/stats4 uid 0 gid 0 mode 0777 level user
> process 4
>         stats socket /run/haproxy/stats5 uid 0 gid 0 mode 0777 level user
> process 5
>         stats socket /run/haproxy/stats6 uid 0 gid 0 mode 0777 level user
> process 6
>         stats socket /run/haproxy/stats7 uid 0 gid 0 mode 0777 level user
> process 7
>         stats socket /run/haproxy/stats8 uid 0 gid 0 mode 0777 level user
> process 8
>         #stats socket /run/haproxy/stats9 uid 0 gid 0 mode 0777 level user
> process 9
>
>         stats bind-process all
>
>   nbproc 8
>   cpu-map 1 1
>   cpu-map 2 2
>   cpu-map 3 3
>   cpu-map 4 4
>   cpu-map 5 5
>   cpu-map 6 6
>   cpu-map 7 7
>   cpu-map 8 8
>   #cpu-map 9 9
>
>         maxconn 100000
>
> defaults
>   log global
>   timeout server 5s
>   timeout connect 5s
>   timeout client 5s
>   option accept-invalid-http-request
> #  option http-ignore-probes
> #  option dontlognull
>         mode    http
>         option  dontlognull
>         option splice-request
>         option splice-response
>         default-server inter 100s
>         timeout connect 5000
>         timeout client  50000
>         timeout server  50000
>         compression algo gzip
>
> frontend app-http
>   bind public.ip:80 interface p2p1 process 1-3
>   bind public.ip:443 ssl crt /haproxy/ssl/_wildcard_.pem interface p2p1
> process 4-7
>   option httplog
>   log global
>   mode http
>    acl white_list src someiprange/24 someip
>    tcp-request content accept if white_list
>    tcp-request content reject
>
>   default_backend app-http-backend
>
> backend app-http-backend
>   bind-process 8
>   mode http
>   option httplog
>   log global
>   option httpchk
>   balance static-rr
>
>   server server1-8080 internal.ip:8082 check port 8082
>   server server2-8080 internal.ip:8082 check port 8082
>
> listen stats
>         bind internal.ip:1901 process 1
>         bind internal.ip:1902 process 2
>         bind internal.ip:1903 process 3
>         bind internal.ip:1904 process 4
>         bind internal.ip:1905 process 5
>         bind internal.ip:1906 process 6
>         bind internal.ip:1907 process 7
>         bind internal.ip:1908 process 8
>         mode            http
>         stats           enable
>         stats   uri /
>         stats show-node
>         stats show-legends
> *************************
>
> Compile Line:
>
> make TARGET=linux2628 USE_OPENSSL=1 SSL_INC=$STATICLIBSSL/include
> SSL_LIB=$STATICLIBSSL/lib ADDLIB=-ldl USE_ZLIB=1
> ZLIB_INC=/opt/zlib-$ZLIB_VERSION/ ZLIB_LIB=/opt/zlib-$ZLIB_VERSION/
> USE_STATIC_PCRE=1 PCRE_LIB=$PCRESTUFFS/lib/ PCRE_INC=$PCRESTUFFS/include/
>
> Output of haproxy -vv
>
> **********************
> /opt/haproxy-1.6.7# ./haproxy -vv
> HA-Proxy version 1.6.7 2016/07/13
> Copyright 2000-2016 Willy Tarreau <[email protected]>
>
> Build options :
>   TARGET  = linux2628
>   CPU     = generic
>   CC      = gcc
>   CFLAGS  = -O2 -g -fno-strict-aliasing -Wdeclaration-after-statement
>   OPTIONS = USE_ZLIB=1 USE_OPENSSL=1 USE_STATIC_PCRE=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.1t  3 May 2016
> Running on OpenSSL version : OpenSSL 1.0.1t  3 May 2016
> OpenSSL library supports TLS extensions : yes
> OpenSSL library supports SNI : yes
> OpenSSL library supports prefer-server-ciphers : yes
> Built with PCRE version : 8.38 2015-11-23
> PCRE library supports JIT : no (USE_PCRE_JIT not set)
> Built without Lua support
> Built with transparent proxy support using: IP_TRANSPARENT
> IPV6_TRANSPARENT IP_FREEBIND
>
> Available polling systems :
>       epoll : pref=300,  test result OK
>        poll : pref=200,  test result OK
>      select : pref=150,  test result OK
> Total: 3 (3 usable), will use epoll.
> *******************************
>
> While I did notice a newer PCRE I haven’t built with it yet, but that
> doesn’t seem to be the area of problem.  I also noticed when using the
> USE_PTHREAD_PSHARED=1 or USE_FUTEX= options on the make command the
> “OPTION=“ output of haproxy -vv doesn’t change, though a close examination
> of the output of the make indicates they are being respected.  I do the
> static compile of pcre, zlib, and openssl once.  For each compile of
> haproxy I do make clean first.
>
> p.s. In the Atomic Operations section of the readme: "you willy have to
> either use”
>
>

Reply via email to