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]

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 <wi...@haproxy.org>

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