Hi, I've set "hard limits" with maxconn for each backend server but it seems that established (keep-alive) connections are not accounted for in the stats. This leads to HAProxy allowing more connections to the backend server than actually defined with the maxconn value.
Config: ############ frontend app-in bind *:18382 option httplog timeout client 1h timeout server 1h timeout http-keep-alive 1h maxconn 96 default_backend app-out ############ backend aoo-out balance roundrobin no option redispatch option persist timeout queue 1 timeout connect 5 timeout check 60s timeout http-keep-alive 4m cookie SERVERID insert indirect nocache option httpchk GET /service?wsdl HTTP/1.0\r\nConnection:\ close server app01-p-18383 10.10.10.11:18383 maxconn 5 maxqueue 1 cookie 1-18383 check fall 1 rise 2 server app01-p-18384 10.10.10.11:18384 maxconn 5 maxqueue 1 cookie 1-18384 check fall 1 rise 2 server app01-p-18385 10.10.10.11:18385 maxconn 5 maxqueue 1 cookie 1-18385 check fall 1 rise 2 server app01-p-18386 10.10.10.11:18386 maxconn 5 maxqueue 1 cookie 1-18386 check fall 1 rise 2 server app01-p-18387 10.10.10.11:18387 maxconn 5 maxqueue 1 cookie 1-18387 check fall 1 rise 2 server app01-p-18388 10.10.10.11:18388 maxconn 5 maxqueue 1 cookie 1-18388 check fall 1 rise 2 server app01-p-18389 10.10.10.11:18389 maxconn 5 maxqueue 1 cookie 1-18389 check fall 1 rise 2 server app01-p-18390 10.10.10.11:18390 maxconn 5 maxqueue 1 cookie 1-18390 check fall 1 rise 2 server app02-p-18383 10.10.10.12:18383 maxconn 5 maxqueue 1 cookie 2-18383 check fall 1 rise 2 server app02-p-18384 10.10.10.12:18384 maxconn 5 maxqueue 1 cookie 2-18384 check fall 1 rise 2 server app02-p-18385 10.10.10.12:18385 maxconn 5 maxqueue 1 cookie 2-18385 check fall 1 rise 2 server app02-p-18386 10.10.10.12:18386 maxconn 5 maxqueue 1 cookie 2-18386 check fall 1 rise 2 server app02-p-18387 10.10.10.12:18387 maxconn 5 maxqueue 1 cookie 2-18387 check fall 1 rise 2 server app02-p-18388 10.10.10.12:18388 maxconn 5 maxqueue 1 cookie 2-18388 check fall 1 rise 2 server app02-p-18389 10.10.10.12:18389 maxconn 5 maxqueue 1 cookie 2-18389 check fall 1 rise 2 server app02-p-18390 10.10.10.12:18390 maxconn 5 maxqueue 1 cookie 2-18390 check fall 1 rise 2 As you can see, each backend server allows a maximum of 5 concurrent connections. But during a stress-test we saw that there were clearly more connections going through HAProxy to the backend: # for ip in 10.10.10.11 10.10.10.12; do for port in 18383 18384 18385 18386 18387 18388 18390; do echo "$ip $port" ; netstat -an | grep $ip | grep $port; done; done 10.10.10.11 18383 tcp 0 0 10.10.10.10:54196 10.10.10.11:18383 ESTABLISHED tcp 0 0 10.10.10.10:53898 10.10.10.11:18383 ESTABLISHED tcp 0 0 10.10.10.10:54826 10.10.10.11:18383 ESTABLISHED tcp 0 0 10.10.10.10:54660 10.10.10.11:18383 ESTABLISHED tcp 0 0 10.10.10.10:54064 10.10.10.11:18383 ESTABLISHED tcp 0 0 10.10.10.10:54434 10.10.10.11:18383 ESTABLISHED 10.10.10.11 18384 tcp 0 0 10.10.10.10:48452 10.10.10.11:18384 ESTABLISHED tcp 0 0 10.10.10.10:49056 10.10.10.11:18384 ESTABLISHED tcp 0 0 10.10.10.10:49220 10.10.10.11:18384 ESTABLISHED tcp 0 0 10.10.10.10:48592 10.10.10.11:18384 ESTABLISHED tcp 0 0 10.10.10.10:48292 10.10.10.11:18384 ESTABLISHED tcp 0 0 10.10.10.10:48824 10.10.10.11:18384 ESTABLISHED 10.10.10.11 18385 tcp 0 0 10.10.10.10:59128 10.10.10.11:18385 ESTABLISHED tcp 0 0 10.10.10.10:56566 10.10.10.11:18385 ESTABLISHED tcp 0 0 10.10.10.10:56388 10.10.10.11:18385 ESTABLISHED tcp 0 0 10.10.10.10:56704 10.10.10.11:18385 ESTABLISHED tcp 0 0 10.10.10.10:57468 10.10.10.11:18385 ESTABLISHED tcp 0 0 10.10.10.10:56854 10.10.10.11:18385 ESTABLISHED tcp 0 0 10.10.10.10:57342 10.10.10.11:18385 ESTABLISHED tcp 0 0 10.10.10.10:57072 10.10.10.11:18385 ESTABLISHED 10.10.10.11 18386 tcp 0 0 10.10.10.10:52090 10.10.10.11:18386 ESTABLISHED tcp 0 0 10.10.10.10:52358 10.10.10.11:18386 ESTABLISHED tcp 0 0 10.10.10.10:51400 10.10.10.11:18386 ESTABLISHED tcp 0 0 10.10.10.10:51712 10.10.10.11:18386 ESTABLISHED tcp 0 0 10.10.10.10:51866 10.10.10.11:18386 ESTABLISHED tcp 0 0 10.10.10.10:52492 10.10.10.11:18386 ESTABLISHED 10.10.10.11 18387 tcp 0 0 10.10.10.10:40588 10.10.10.11:18387 ESTABLISHED tcp 0 0 10.10.10.10:40272 10.10.10.11:18387 ESTABLISHED tcp 0 0 10.10.10.10:41360 10.10.10.11:18387 ESTABLISHED tcp 0 0 10.10.10.10:40986 10.10.10.11:18387 ESTABLISHED tcp 0 0 10.10.10.10:40466 10.10.10.11:18387 ESTABLISHED tcp 0 0 10.10.10.10:40738 10.10.10.11:18387 ESTABLISHED 10.10.10.11 18388 tcp 0 0 10.10.10.10:58976 10.10.10.11:18388 ESTABLISHED tcp 0 0 10.10.10.10:59454 10.10.10.11:18388 ESTABLISHED tcp 0 0 10.10.10.10:58820 10.10.10.11:18388 ESTABLISHED tcp 0 0 10.10.10.10:59598 10.10.10.11:18388 ESTABLISHED tcp 0 0 10.10.10.10:58500 10.10.10.11:18388 ESTABLISHED tcp 0 0 10.10.10.10:58694 10.10.10.11:18388 ESTABLISHED tcp 0 0 10.10.10.10:59218 10.10.10.11:18388 ESTABLISHED tcp 0 0 10.10.10.10:32996 10.10.10.11:18388 ESTABLISHED 10.10.10.11 18390 tcp 0 0 10.10.10.10:34148 10.10.10.11:18390 ESTABLISHED tcp 0 0 10.10.10.10:33698 10.10.10.11:18390 ESTABLISHED tcp 0 0 10.10.10.10:33206 10.10.10.11:18390 ESTABLISHED tcp 0 0 10.10.10.10:33524 10.10.10.11:18390 ESTABLISHED tcp 0 0 10.10.10.10:33396 10.10.10.11:18390 ESTABLISHED 10.10.10.12 18383 tcp 0 0 10.10.10.10:52148 10.10.10.12:18383 ESTABLISHED tcp 0 0 10.10.10.10:52354 10.10.10.12:18383 ESTABLISHED tcp 0 0 10.10.10.10:52466 10.10.10.12:18383 ESTABLISHED tcp 0 0 10.10.10.10:52926 10.10.10.12:18383 ESTABLISHED tcp 0 0 10.10.10.10:52642 10.10.10.12:18383 ESTABLISHED tcp 0 0 10.10.10.10:53090 10.10.10.12:18383 ESTABLISHED 10.10.10.12 18384 tcp 0 0 10.10.10.10:42608 10.10.10.12:18384 ESTABLISHED tcp 0 0 10.10.10.10:43184 10.10.10.12:18384 ESTABLISHED tcp 0 0 10.10.10.10:43342 10.10.10.12:18384 ESTABLISHED tcp 0 0 10.10.10.10:42906 10.10.10.12:18384 ESTABLISHED tcp 0 0 10.10.10.10:42402 10.10.10.12:18384 ESTABLISHED tcp 0 0 10.10.10.10:42724 10.10.10.12:18384 ESTABLISHED 10.10.10.12 18385 tcp 0 0 10.10.10.10:48830 10.10.10.12:18385 ESTABLISHED tcp 0 0 10.10.10.10:48408 10.10.10.12:18385 ESTABLISHED tcp 0 0 10.10.10.10:48214 10.10.10.12:18385 ESTABLISHED tcp 0 0 10.10.10.10:48100 10.10.10.12:18385 ESTABLISHED tcp 0 0 10.10.10.10:47912 10.10.10.12:18385 ESTABLISHED tcp 0 0 10.10.10.10:48676 10.10.10.12:18385 ESTABLISHED 10.10.10.12 18386 tcp 0 0 10.10.10.10:49612 10.10.10.12:18386 ESTABLISHED tcp 0 0 10.10.10.10:49452 10.10.10.12:18386 ESTABLISHED tcp 0 0 10.10.10.10:48684 10.10.10.12:18386 ESTABLISHED tcp 0 0 10.10.10.10:48988 10.10.10.12:18386 ESTABLISHED tcp 0 0 10.10.10.10:48874 10.10.10.12:18386 ESTABLISHED 10.10.10.12 18387 tcp 0 0 10.10.10.10:36182 10.10.10.12:18387 ESTABLISHED tcp 0 0 10.10.10.10:36652 10.10.10.12:18387 ESTABLISHED tcp 0 0 10.10.10.10:36804 10.10.10.12:18387 ESTABLISHED tcp 0 0 10.10.10.10:35876 10.10.10.12:18387 ESTABLISHED tcp 0 0 10.10.10.10:36070 10.10.10.12:18387 ESTABLISHED tcp 0 0 10.10.10.10:36392 10.10.10.12:18387 ESTABLISHED 10.10.10.12 18388 tcp 0 0 10.10.10.10:59652 10.10.10.12:18388 ESTABLISHED tcp 0 0 10.10.10.10:60424 10.10.10.12:18388 ESTABLISHED tcp 0 0 10.10.10.10:60582 10.10.10.12:18388 ESTABLISHED tcp 0 0 10.10.10.10:60154 10.10.10.12:18388 ESTABLISHED tcp 0 0 10.10.10.10:59836 10.10.10.12:18388 ESTABLISHED 10.10.10.12 18390 tcp 0 0 10.10.10.10:52104 10.10.10.12:18390 ESTABLISHED tcp 0 0 10.10.10.10:53028 10.10.10.12:18390 ESTABLISHED tcp 0 0 10.10.10.10:52264 10.10.10.12:18390 ESTABLISHED tcp 0 0 10.10.10.10:52868 10.10.10.12:18390 ESTABLISHED tcp 0 0 10.10.10.10:52626 10.10.10.12:18390 ESTABLISHED tcp 0 0 10.10.10.10:52398 10.10.10.12:18390 ESTABLISHED (10.10.10.10 is obviously the HAProxy's IP) Some of the backend servers even reached 8 concurrent connections. 6 would have been possible (5 maxconn + 1 healthcheck). In the html stats I saw that "Sessions Cur" was mostly at 1 or 0, indicating that the already established connections were not counted in. Also in the logged stats (to rule out a problem in the html display), the srv_conn is nowhere near the actual number of connections: Aug 7 16:32:09 haproxy haproxy[31083]: client:42724 [07/Aug/2017:16:32:08.168] app-in app-out/app02-p-18389 975/0/0/100/1075 200 798 - - --VN 97/96/2/1/0 0/0 "POST / HTTP/1.1" Aug 7 16:32:09 haproxy haproxy[31083]: client:42698 [07/Aug/2017:16:32:08.158] app-in app-out/app01-p-18385 983/0/0/110/1093 200 799 - - --DN 97/96/1/1/0 0/0 "POST / HTTP/1.1" Aug 7 16:32:09 haproxy haproxy[31083]: client:42546 [07/Aug/2017:16:32:08.080] app-in app-out/app01-p-18388 1093/0/0/110/1203 200 799 - - --DN 97/96/0/1/0 0/0 "POST / HTTP/1.1" Aug 7 16:32:09 haproxy haproxy[31083]: client:42706 [07/Aug/2017:16:32:08.455] app-in app-out/app01-p-18389 932/0/0/99/1031 200 799 - - --DN 97/96/0/1/0 0/0 "POST / HTTP/1.1" Aug 7 16:32:09 haproxy haproxy[31083]: client:42740 [07/Aug/2017:16:32:08.737] app-in app-out/app01-p-18389 913/0/0/102/1015 200 799 - - --DN 97/96/2/1/0 0/0 "POST / HTTP/1.1" Aug 7 16:32:09 haproxy haproxy[31083]: client:42708 [07/Aug/2017:16:32:08.612] app-in app-out/app01-p-18390 1096/0/0/106/1202 200 798 - - --VN 97/96/1/1/0 0/0 "POST / HTTP/1.1" Aug 7 16:32:09 haproxy haproxy[31083]: client:42626 [07/Aug/2017:16:32:08.776] app-in app-out/app02-p-18387 967/0/0/108/1075 200 800 - - --VN 97/96/0/1/0 0/0 "POST / HTTP/1.1" Aug 7 16:32:10 haproxy haproxy[31083]: client:42724 [07/Aug/2017:16:32:09.244] app-in app-out/app02-p-18389 947/0/0/98/1045 200 798 - - --VN 97/96/1/1/0 0/0 "POST / HTTP/1.1" Aug 7 16:32:10 haproxy haproxy[31083]: client:42698 [07/Aug/2017:16:32:09.252] app-in app-out/app01-p-18385 1002/0/0/107/1109 200 799 - - --DN 97/96/1/1/0 0/0 "POST / HTTP/1.1" Aug 7 16:32:10 haproxy haproxy[31083]: client:42546 [07/Aug/2017:16:32:09.283] app-in app-out/app01-p-18388 1038/0/0/102/1140 200 799 - - --DN 97/96/1/1/0 0/0 "POST / HTTP/1.1" Aug 7 16:32:10 haproxy haproxy[31083]: client:42740 [07/Aug/2017:16:32:09.752] app-in app-out/app01-p-18389 1071/0/0/100/1171 200 799 - - --DN 97/96/2/1/0 0/0 "POST / HTTP/1.1" Aug 7 16:32:10 haproxy haproxy[31083]: client:42708 [07/Aug/2017:16:32:09.815] app-in app-out/app01-p-18390 1042/0/0/98/1140 200 798 - - --VN 97/96/1/1/0 0/0 "POST / HTTP/1.1" Aug 7 16:32:11 haproxy haproxy[31083]: client:42626 [07/Aug/2017:16:32:09.852] app-in app-out/app02-p-18387 1057/0/0/98/1155 200 800 - - --VN 97/96/1/1/0 0/0 "POST / HTTP/1.1" Aug 7 16:33:13 haproxy haproxy[31083]: client:42706 [07/Aug/2017:16:32:09.486] app-in app-out/app01-p-18389 64294/0/0/96/64390 200 799 - - --DN 96/96/2/1/0 0/0 "POST / HTTP/1.1" As said before, these are all keep-alive connections. They can be running idle for quite a long time (hence the long timeouts), but that's application design. To me it looks like only connections with current data-transfer are accounted for in the CUR statistics, idle connections somehow drop out and HAProxy then allows additional connections to the backend, causing it to stale (it cannot handle more than 7 sessions). Am I wrong? Did I misinterpret the maxconn purpose? Or was there a major change from the version I use (HAProxy 1.6.3 on Ubuntu Xenial/1.6.3-1ubuntu0.1)? In the change log I haven't seen a bugfix concerning maxconn. Thanks for any advice in advance, ck

