Hi,

After switched to haproxy 1.9 with threads activated, i noticed a significant 
memory leak.
With threads disable (and bind process omitted) leak disappear.

This seems to be related to stick-table/peers with regard to the (simplified) 
configuration.

++
Manu


ENV:
HA-Proxy version 1.9.8-1 2019/05/15 - https://haproxy.org/
Build options :
  TARGET  = linux2628
  CPU     = generic
  CC      = gcc
  CFLAGS  = -g -O2 -fPIE -fstack-protector-strong -Wformat 
-Werror=format-security -D_FORTIFY_SOURCE=2
  OPTIONS = USE_ZLIB=1 USE_REGPARM=1 USE_OPENSSL=1 USE_SYSTEMD=1 USE_PCRE=1 
USE_NS=1

Default settings :
  maxconn = 2000, bufsize = 16384, maxrewrite = 1024, maxpollevents = 200

Built with OpenSSL version : BoringSSL 7f4f41fa
OpenSSL library supports TLS extensions : yes
OpenSSL library supports SNI : yes
OpenSSL library supports : TLSv1.0 TLSv1.1 TLSv1.2 TLSv1.3
Built with network namespace support.
Built with transparent proxy support using: IP_TRANSPARENT IPV6_TRANSPARENT 
IP_FREEBIND
Built with zlib version : 1.2.8
Running on zlib version : 1.2.8
Compression algorithms supported : identity("identity"), deflate("deflate"), 
raw-deflate("deflate"), gzip("gzip")
Built with PCRE version : 8.35 2014-04-04
Running on PCRE version : 8.35 2014-04-04
PCRE library supports JIT : no (USE_PCRE_JIT not set)
Encrypted password support via crypt(3): yes
Built with multi-threading support.

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.

Available multiplexer protocols :
(protocols marked as <default> cannot be specified using 'proto' keyword)
              h2 : mode=HTX        side=FE|BE
              h2 : mode=HTTP       side=FE
       <default> : mode=HTX        side=FE|BE
       <default> : mode=TCP|HTTP   side=FE|BE

Available filters :
        [SPOE] spoe
        [COMP] compression
        [CACHE] cache
        [TRACE] trace

minimal configuration to reproduce the leak:
global
    user haproxy
    group haproxy
    daemon

    # ssl(odd) http(even)
    nbthread 2

    stats socket /var/run/haproxy_L6.sock mode 660 level admin expose-fd 
listeners

    log /dev/log daemon warning

    # hard limit
    hard-stop-after 2h
    maxconn 262144

defaults
    log global
    log-tag "haproxy_L6"
    option dontlognull
    mode tcp
    maxconn 100000
    timeout connect 500ms
    
    
    timeout client 610s
    retries 3
    timeout server 610s

peers front-peers

    peer L6_1 x.y.z.1:943

    peer L6_2 x.y.z.2:943

    peer L6_3 x.y.z.3:943


frontend ssl-front

    bind :443          process 1/odd
    bind :::443 v6only process 1/odd


    tcp-request inspect-delay 5s
    tcp-request content reject if !{ req_ssl_sni -m found }
    default_backend ssl-back

backend ssl-back
    balance roundrobin
    option ssl-hello-chk

    stick-table type binary len 32 size 1m expire 5m peers front-peers

    acl clienthello req_ssl_hello_type 1
    acl serverhello rep_ssl_hello_type 2

    tcp-request inspect-delay 5s
    tcp-request content accept if clienthello

    tcp-response content accept if serverhello

    stick on payload_lv(43,1) if clienthello
    stick store-response payload_lv(43,1) if serverhello


    server ssl_1 a.b.c.1:463 check send-proxy 

    server ssl_2 a.b.c.2:463 check send-proxy 

    server ssl_3 a.b.c.3:463 check send-proxy 

frontend http-front
    bind :80          process 1/even
    bind :::80 v6only process 1/even


    default_backend http-back


backend http-back
    balance roundrobin


    server L7_1 a.b.c.1:480 check send-proxy 

    server L7_2 a.b.c.1:480 check send-proxy 

    server L7_3 a.b.c.3:480 check send-proxy 

Reply via email to