Hi

CPU speed is really important for HAProxy.
As you mentionned, HAProxy is mono-process. It's an event driven
software, so the faster the CPU, the more request you'll able to have.
One botleneck people sometime forget is the NIC.
What kind of NIC do you currently use?
I guess it's a Broadcom :)

Concerning your CPU consumption, it looks normal: 16% in userland for
HAProxy itself and 38% in system, for syscall generated by HAProxy.
There is nothing weird with those numbers. (Willy can confirm).
By the way, what is the CPU speed of machine?

Concerning your conf, I ca see two thing:
1. you can disable option splice, unless your objects are very big, it
won't have any improvement on http.
2. since you're using option http-server-close, connections against
the server are very short. so your leastconn algorythm is not
appropriate. Just use roundrobin.

cheers


On Fri, Feb 3, 2012 at 4:53 PM, Anton Winter <[email protected]> wrote:
> Hi,
>
> I am running haproxy using Ubuntu 10.04 LTS on some HP DL360's which have 1
> CPU (8cores - some servers with 2.0GHz, others 2.5GHz) and 8Gb RAM.  They
> talk http to 8 nginx backends and I am seeing up around 100% CPU utilization
> by the haproxy process, resulting in high latency.
>
> Previously these machines were behind hardware firewalls that were
> experiencing capacity issues and were subsequently moved away from them.  In
> doing so iptables had to be enabled, but I have made sure the nf_conntrack
> hashsize is sufficiently sized.  Prior to relocating the servers each
> haproxy instance would do around 12k requests per second however now they
> jump around the 9-11k requests per second mark.   The upstream firewall
> issues may have actually been masking the haproxy cpu starvation problems so
> it may just be a coincidence that this cpu symptom was noticed after the
> relocation.
>
> I've looked at a range of commonly known bottlenecks which has included
> nf_conntrack bucket sizes (even removed conntrack & iptables temporarily),
> tuning haproxy by pinning haproxy to a single cpu, various ethtool & sysctl
> options etc.
>
> I see that people are able to sustain higher throughput using haproxy on
> this sort of hardware spec so I suspect I've got a misconfiguration
> somewhere, or a bug causing the high CPU util %.  I am having difficulty
> isolating what exactly is causing the high cpu usage/latency problem so any
> advice on what else to look for or what additional debugging I can do would
> be greatly appreciated.
>
> Respective configs and info below:
>
> # haproxy -vv
> HA-Proxy version 1.4.19 2012/01/07
> Copyright 2000-2011 Willy Tarreau <[email protected]>
>
> Build options :
>  TARGET  = linux26
>  CPU     = amd64
>  CC      = gcc
>  CFLAGS  = -g -fno-strict-aliasing
>  OPTIONS = USE_LINUX_SPLICE=1 USE_LINUX_TPROXY=1 USE_PCRE=1
>
> Default settings :
>  maxconn = 2000, bufsize = 16384, maxrewrite = 8192, maxpollevents = 200
>
> Encrypted password support via crypt(3): yes
>
> Available polling systems :
>     sepoll : pref=400,  test result OK
>      epoll : pref=300,  test result OK
>       poll : pref=200,  test result OK
>     select : pref=150,  test result OK
> Total: 4 (4 usable), will use sepoll.
>
> # my haproxy.conf (yes, I know the maxconn's are quite high.).
> global
>        daemon
>        maxconn 320000
>        spread-checks 3
>        nbproc  1
>        pidfile /var/run/haproxy/haproxy.pid
>        stats socket /var/run/haproxy/haproxy.sock
>        user haproxy
>        group haproxy
>
> defaults
>        mode    http
>        maxconn 300000
>        retries 2
>        timeout connect 5000ms
>        timeout client  5000ms
>        timeout server  5000ms
>        timeout queue   3000ms
>        timeout check   2000ms
>        timeout http-request    10s
>        timeout http-keep-alive 10s
>        errorfile 400 /etc/haproxy/errors/400.http
>
> listen backends
>        bind *:80
>        balance leastconn
>        option splice-auto
>        option tcp-smart-accept
>        option tcp-smart-connect
>        option forwardfor except 127.0.0.1
>        option http-server-close
>        option redispatch
>        option http-no-delay
>        option httpchk GET /health?from=haproxy
>        stats enable
>        stats hide-version
>        stats realm Haproxy\ Statistics
>        stats uri /xx?xx
>        stats auth xx:xx
>        # server localhost 127.0.0.1:8080 maxconn 40000 check fall 1 weight
> 75
>        server backend1 122.200.x.x:8080 maxconn 40000 check fall 1 weight 50
>        server backend2 122.200.x.x:8080 maxconn 40000 check fall 1 weight 50
>        server backend3 122.200.x.x:8080 maxconn 40000 check fall 1 weight 50
>        server backend4 122.200.x.x:8080 maxconn 40000 check fall 1 weight 50
>        server backend5 122.200.x.x:8080 maxconn 40000 check fall 1 weight 70
>        server backend6 122.200.x.x:8080 maxconn 40000 check fall 1 weight 70
>        server backend7 122.200.x.x:8080 maxconn 40000 check fall 1 weight 70
>        server backend8 122.200.x.x:8080 maxconn 40000 check fall 1 weight 85
>
>
>
> # top -b -n1 -U haproxy
> top - 14:28:28 up  3:51,  4 users,  load average: 1.03, 1.07, 1.01
> Tasks: 195 total,   2 running, 193 sleeping,   0 stopped,   0 zombie
> Cpu0  : 16.5%us, 38.5%sy,  0.0%ni, 40.5%id,  0.0%wa,  0.0%hi,  4.4%si,
>  0.0%st
> Cpu1  :  0.4%us,  1.4%sy,  0.0%ni, 94.4%id,  0.1%wa,  0.0%hi,  3.7%si,
>  0.0%st
> Cpu2  :  0.5%us,  1.3%sy,  0.0%ni, 94.5%id,  0.1%wa,  0.0%hi,  3.7%si,
>  0.0%st
> Cpu3  :  1.0%us,  1.5%sy,  0.0%ni, 91.9%id,  0.1%wa,  0.0%hi,  5.6%si,
>  0.0%st
> Cpu4  :  0.3%us,  1.2%sy,  0.0%ni, 93.1%id,  0.0%wa,  0.0%hi,  5.4%si,
>  0.0%st
> Cpu5  :  0.3%us,  0.2%sy,  0.0%ni, 95.7%id,  0.0%wa,  0.0%hi,  3.8%si,
>  0.0%st
> Cpu6  :  0.3%us,  0.4%sy,  0.0%ni, 95.9%id,  0.0%wa,  0.0%hi,  3.4%si,
>  0.0%st
> Cpu7  :  0.4%us,  0.3%sy,  0.0%ni, 94.2%id,  0.0%wa,  0.0%hi,  5.1%si,
>  0.0%st
> Mem:   8192404k total,  3547392k used,  4645012k free,    52668k buffers
> Swap:  3878904k total,        0k used,  3878904k free,   183604k cached
>
>  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
> 15611 haproxy   20   0 6848m 2.7g  700 R   99 34.0  97:57.06
> /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -D -p
> /var/run/haproxy/haproxy.pid
>
>
> # strace -c -p $(pidof haproxy)
> Process 15611 attached - interrupt to quit
> ^CProcess 15611 detached
> % time     seconds  usecs/call     calls    errors syscall
> ------ ----------- ----------- --------- --------- ----------------
>  26.29    0.002494           0     48144           close
>  26.26    0.002491           0     78178     51496 connect
>  10.77    0.001022           0     38527      4026 sendto
>  10.16    0.000964           0    103831           setsockopt
>  8.15    0.000773           0     70599           fcntl
>  7.32    0.000694           0     51337           socket
>  5.22    0.000495           0     19263           accept
>  3.11    0.000295           0     34871       676 recvfrom
>  2.49    0.000236           0      9766           shutdown
>  0.22    0.000021           0      4532           epoll_ctl
>  0.00    0.000000           0       300           epoll_wait
> ------ ----------- ----------- --------- --------- ----------------
> 100.00    0.009485                459348     56198 total
>
>
> Regards,
> Anton
>
>

Reply via email to