????? 之前一直感覺CloudFoundry的GoRouter的性能不靠譜,或者我們的CloudFoundry?部署架構存在問題,想著進行一些壓力測試,可是一直苦于沒有壓力測試的工具。上一周,部門須要出一個測試報告,剛好借此機會。進行一個比較好的測試。
????? 測試的時候,是使用的兩個gorouter+nginx,測試使用的應用是一個比較簡單的應用,使用LoadRunner進行壓力測試,使用LoadRunner的1000個用戶進行,測試效果非常差。和QQ群里的同學交流,他們也出現了類似的問題,使用F5或者HaProxy?都非常正常,可是使用nginx?出現非常多問題,表現出來的性能非常差。所以也嘗試改用haproxy做負載均衡。
????haproxy的部署方式就不描寫敘述了,使用haproxy的默認配置,性能也是非常差,開始進行調優。一開始以為是應用、gorouter的問題,可是定位了非常久,發現這些眼下看來都沒有什么問題。最后,對haproxy的配置文件進行了優化,眼下我的haproxy配置文件:
????? global
??? log 127.0.0.1?? syslog info
??? daemon
??? maxconn 300000
??? spread-checks 4
??? nbproc 8
defaults
??? log global
??? timeout connect 30000ms
??? timeout client 300000ms
??? timeout server 300000ms
??? # maxconn 320000
?? # option http-pretend-keepalive
??? option dontlognull
??? option forwardfor
??? option redispatch
??? option abortonclose
listen admin_stats
?????? bind 0.0.0.0:1080???
??????? mode http????????????
??????? option httplog
??????? maxconn 10
??????? stats refresh 30s
??????? stats uri /stats
??????? stats realm XingCloud\ Haproxy
??????? stats auth admin:admin????????
??????? stats hide-version?????????????
frontend http-in
??? mode tcp
??? bind *:80
??? reqadd X-Forwarded-Proto:\ http
??? default_backend tcp-routers
backend tcp-routers
??? mode tcp
??? balance source
???????? server node1 10.106.1.46:80? weight 10? inter 2000 rise 2 fall 5 maxconn 10000
??????? server node2 10.106.1.57:80? weight 10 inter 2000 rise 2 fall 5 maxconn 10000
還須要改動?操作系統的配置 /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096??????? 87380?? 4194304
net.ipv4.tcp_wmem = 4096??????? 16384?? 4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024??? 65000
net.nf_conntrack_max = 1024000
????改動該配置文件,主要是為了添加機器能夠打開的TCP連接數,還須要設置ulimit,設置的應該比較大一些。我使用的操作系統是Ubuntu10.04 ,須要載入模塊 modprobe ip_conntrack
終于的測試結果:
?
?
之前使用nginx的時候,才300TPS。。。哎。。如今最終好多了。眼下使用的機器都是虛擬機(4core /10G/ )假設使用更好的機器,不知道結果會不會好一些。
?
個人獨立博客: http://www.wangdk.com/
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
