2013年4月1日星期一

内核参数引发的思考


        问题描述:由于步前路,完成剩下的Load Balance 测试,今天玩的是Haproxy。安装和部署
都只是碰到一些小的问题,基本上问题也不是问题了(此类为可通过Google Baidu 轻松解决)。
       确认可以正常访问后,分别给两个web server web1 和web2 写了个静态页面,确认可以正常访问后,
在log 服务器上用 ab 做压力测试,按照测试的基准,从100000 请求数的静态页面开始测试
 
root@log:~# ab -c 10 -n 100000 http://192.168.104.132:80/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
 
Benchmarking 192.168.104.132 (be patient)
apr_poll: The timeout specified has expired (70007)
Total of 6263 requests completed
 
        只完成了6263 个请求,这年头,瞎猫子碰死老鼠也不容易,因为这个系统是之前测试过Nginx 的,
理论上跟系统没有关系,不然在测试Nginx 并发的时候,就应该暴露了,检查了Haproxy 的配置文件,把
CPU 的相关东西调大一些,测试,错误依旧;进程数调多一些,测试,错误依旧;把Haproxy 超时时间
降低,错误依旧……
        吃饭的时候,也没有点头绪,搞技术怕的就是找不到原因,而不是如何解决,中午休息时间,buffer
 一下,睡完了起来接着整吧!
        后来再想想,看看是不是TCP 连接数的问题,
 
root@log:~# ab -c 10 -n 100000 http://192.168.104.132:80/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
 
Benchmarking 192.168.104.132 (be patient)
Completed 10000 requests
apr_poll: The timeout specified has expired (70007)
Total of 15836 requests completed
 
root@dispatch:/usr/local/haproxy# netstat -ant |grep TIME_WAIT | wc -l
8187
 
root@dispatch:/usr/local/haproxy# netstat -ant |grep TIME_WAIT | wc -l
30
 
        以上两次统计TIME_WAIT 连接数的情况是:8187 此时 ab 正在跑, 30 此数据 ab 已跑完15836 后退出。
这个情况让我觉得算是正常吧,TIME_WAIT 自动清除了,连接占用的时间也很少,放弃了查这个TIME_WAIT
相关参数。
 
        于是还是围绕着超时的参数去转悠,找了个内核参数 /proc/sys/net/ipv4/tcp_fin_timeout  默认值是60  将其值
改成30 后,测试数据基本与上面相同,原因也不在这。
        这个,情何以堪,随便再找找原因吧,看了一下/var/log/syslog 日志文件,妈呀,
 
dispatch kernel: [ 9984.162370] nf_conntrack: table full, dropping packet.
 
        大量的以上信息,我怎么才想着看系统日志,这么,有了这个,很快就找到原来还是连接数的限制,看了
一下,系统默认的是31732,
 
 root@dispatch:/usr/local/haproxy# cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max 
  31732
 
        将其后面加了个0,再跑 ab 测试,这下OK
root@dispatch:/var/log# echo "317320" > /proc/sys/net/ipv4/netfilter/ip_conntrack_max 
 
        耗时 58秒完成ab,结果虽然重要,过程也相当的,如果早看了系统日志,也不至于花上半天的时间摸索。
关于测试结果,这里不是重点,忽略,谨以此作为处理问题的经验罢了。

没有评论:

发表评论