I had a 95% CPU usage with a single haproxy process, so I switched to nbproc 2
.
I have a two frontends and two backends; I pinned 1 frontend and 1 backend to process 1, and pinned the remaining two to process 2. I expected the load on the CPU cores to be distributed based on the load of the frontend/backend groups, however, now I have two haproxy processes, one using 20% CPU, the other still using 95% CPU. Why is that the case?
I am not yet dropping connections, but I will be as I start using even more CPU on that one thread.
Configuration is as follows:
global
nbproc 2
maxconn 150000
user root # haproxy
group root # haproxy
daemon
stats socket /var/run/haproxy.sock group haproxy mode 775
defaults
mode tcp
timeout connect 5000ms
timeout client 130s
timeout server 130s
frontend http-in
bind-process 2
bind *:80
mode http
maxconn 40000
acl host_typea hdr(host) -i typea.example.com
acl host_typeb hdr(host) -i www.example.com
use_backend typea-backend if host_typea
use_backend typeb-backend if host_typeb
default_backend typeb-backend
frontend proxy-customers-frontend
bind-process 1
bind *:20000
maxconn 10000
option httpclose
mode http
log global
acl host_typec hdr(proxy-authorization) -m len gt 80
use_backend typec-backend if host_typec
default_backend typed-backend
backend typea-backend
bind-process 2
mode http
balance url_param ip check_post
server localhost-30000 127.0.0.1:30000 check
server localhost-30001 127.0.0.1:30001 check
server localhost-30002 127.0.0.1:30002 check
server localhost-30003 127.0.0.1:30003 check
server localhost-30004 127.0.0.1:30004 check
server localhost-30005 127.0.0.1:30005 check
server localhost-30006 127.0.0.1:30006 check
server localhost-30007 127.0.0.1:30007 check
backend typeb-backend
bind-process 2
mode http
option forwardfor
server localhost-81 127.0.0.1:81 check
backend typec-backend
bind-process 1
mode http
server localhost-19999 127.0.0.1:19999 check
backend typed-backend
bind-process 1
mode http
server localhost-20001 127.0.0.1:20001 check
server localhost-20002 127.0.0.1:20002 check
server localhost-20003 127.0.0.1:20003 check
server localhost-20004 127.0.0.1:20004 check
server localhost-20005 127.0.0.1:20005 check
server localhost-20006 127.0.0.1:20006 check
server localhost-20007 127.0.0.1:20007 check
server localhost-20008 127.0.0.1:20008 check