2 votes

Haproxy "nbproc 2" high CPU

J'avais une utilisation de 95% du CPU avec un seul processus haproxy, j'ai donc changé pour nbproc 2 .

J'ai deux frontends et deux backends ; j'ai épinglé 1 frontend et 1 backend au processus 1, et j'ai épinglé les deux autres au processus 2. Je m'attendais à ce que la charge sur les cœurs de CPU soit distribuée en fonction de la charge des groupes frontend/backend, mais j'ai maintenant deux processus haproxy, l'un utilisant 20% de CPU, l'autre utilisant toujours 95% de CPU. Pourquoi en est-il ainsi ?

Je ne suis pas encore en train d'abandonner des connexions, mais je le ferai lorsque je commencerai à utiliser encore plus de CPU sur ce fil.

La configuration est la suivante :

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

2voto

Jeremy Fluhmann Points 21

Je viens de m'engager dans une voie similaire en activant plusieurs processus pour haproxy. D'après les informations aquí Dans le cas d'un processus, il semble que le comportement par défaut du noyau Linux soit que les processus héritent de l'affinité CPU du parent, ce qui signifie qu'ils héritent par défaut du même CPU. Je pense que vous verrez une différence si vous affectez chaque processus à un processeur spécifique avec cpu-map :

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X