目前,我正在CentOS 6上推出HAProxy,它将向某些Apache HTTPD服务器发送请求,并遇到性能问题。 在过去的几天中,我花了大量的search时间,在基准testing中仍然不能达到10k / sec以上的连接速度(有时候我也能达到30k / sec)。
我将内部和外部NICS的TX / RX队列的IRQ固定在独立的CPU内核上,并确保HAProxy固定在它自己的内核上。
我也对sysctl.conf进行了如下调整:
# Max open file descriptors fs.file-max = 331287 # TCP Tuning net.ipv4.tcp_tw_reuse = 1 net.ipv4.ip_local_port_range = 1024 65023 net.ipv4.tcp_max_syn_backlog = 10240 net.ipv4.tcp_max_tw_buckets = 400000 net.ipv4.tcp_max_orphans = 60000 net.ipv4.tcp_synack_retries = 3 net.core.somaxconn = 40000 net.ipv4.tcp_rmem = 4096 8192 16384 net.ipv4.tcp_wmem = 4096 8192 16384 net.ipv4.tcp_mem = 65536 98304 131072 net.core.netdev_max_backlog = 40000 net.ipv4.tcp_tw_reuse = 1
如果我使用AB直接打networking服务器,我很容易得到30k / s的连接。 如果我停止Web服务器,并使用AB打HAProxy,那么我得到30k / s的连接,但显然这是没用的。
我现在也禁用了iptables,因为我读了nf_conntrack可以减慢一切,没有改变。 我也禁用了irqbalance服务。
事实上,我可以击中每个单独的设备30k / s使我相信服务器的调整是好的,它必须是一些HAProxyconfiguration?
这里是我通过阅读调优文章等构build的configurationhttp://pastebin.com/zsCyAtgU
该服务器是一个双Xeon CPU E5-2620(6核心)与32GB的RAM。 运行Centos 6.2 x64。 私有和公共接口在单独的NICS上。
有人有主意吗? 谢谢。
您是否尝试过使用比AB更可靠的testing工具? 你可能会发现它本身就是一个天花板,而不是HAProxy。 考虑使用Apache jMeter或适当的有状态负载testing应用程序。
在Apache上Keepalives可能掩盖/歪曲AB结果给你看到的差异,
您应该在负载testing期间发布netstat的内容,以便我们可以build立正在使用的连接状态并基于此来适当地调整设置。
不过,您应该可以通过在默认部分中添加以下选项来稍微提高性能:
option tcp-smart-accept option tcp-smart-connect
有一个非常好的讨论,可以在这里反映出你的一些顾虑, http://www.mail-archive.com/[email protected]/msg07156.html
远程诊断有点棘手。 但是,如果Apache能够满足这些要求,则不太可能是内核级别或TCP / IP堆栈设置。 所以你的重点会更好地看着你的HAProxyconfiguration。