Haproxy“nbproc 2”高CPU

我有一个单一的haproxy进程有95%的CPU使用率,所以我切换到nbproc 2

我有两个前端和两个后端, 我把1个前端和1个后端固定到了进程1,并且把剩下的两个固定到了进程2上。我期望CPU核心上的负载根据前端/后端组的负载进行分配,但是现在我有两个haproxy进程,一个使用20%的CPU,另一个使用95%的CPU。 为什么会这样?

我还没有断开连接,但是我将会开始在这个线程上使用更多的CPU。

configuration如下:

 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 

我刚刚开始了一个类似的道路,启用haproxy的多个进程。 根据这里的信息,看起来Linux内核的默认行为是为进程从父进程inheritanceCPU亲缘关系,这将默认为相同的CPU。 我相信,如果使用cpu-map将每个进程映射到特定的CPU,您将看到不同:

 nbproc 2 cpu-map 1 0 cpu-map 2 1