Chinaunix首页 | 论坛 | 博客
  • 博客访问: 669099
  • 博文数量: 53
  • 博客积分: 830
  • 博客等级: 准尉
  • 技术积分: 1089
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-31 18:23
文章存档

2019年(1)

2018年(1)

2016年(1)

2015年(1)

2014年(12)

2013年(4)

2012年(33)

分类: LINUX

2012-05-29 13:31:50

           某项目3

.原先问题: 压用户数据初始化接口时,100~200并发时报如下异常:

      info: Can not connect to MySQL server
      Time: 2011-8-8 10:37am
      Script:
      Error: Can't connect to MySQL server on '10.168.22.85' (99)
      Errno.: 2003

      开发经过调整数据库参数问题依然存在。

2.tps波动比较大。

发现web服务器出现很多的,且两波峰之间时间为:45秒,
实际应用中常用的是30秒,1分钟和2分钟等因此上述波动也是因为TIME_WAIT很多,最少没有TCPL连接可用造成的,直到2MSL服务器才释放连接造成的。

 自我析:主要高并发时报很web服务器报很多TIME_WAIT,此种错误是有可能来自web,本身,也有可能是数据库,可以有两种修改方法:由修改web参数,由keep-alive 保持为on,同时修改keep timeout时间,要不就同时修改web,和数据库系统参数,使TCP共享连接。

如下:

  二.今天上午开发做了系统参数调整后,发现问题解决,tps也达到预期值:

        WEB服务器、跟数据库服务器的操作系统我都作了调化

        sysctl -w net.ipv4.tcp_tw_reuse=1

        新的连接可以重新使用TIME-WAIT套接字(rhel4.8默认为0)

        sysctl -w net.ipv4.tcp_tw_recycle=1

        启动TIME-WAIT套接字状态的快速循环功能(rhel4.8默认为0)

        sysctl -w net.ipv4.tcp_fin_timeout=30

        套接字关闭时,保持FIN-WAIT-2状态的时间(rhel4.8默认为60)

        sysctl -w net.core.wmem_max=8388608

        sysctl -w net.core.rmem_max=8388608

        对于所有协议的队列,设置最大系统发送缓存(wmen)和接收缓存(rmem)到8M(rhel4.8默认为131071)
    注:开发只是用命令进行了临时调整,如果要长期保存上述配置,需要修改系统配置文件:/etc/sysctl.conf ,且需要重启服务器。


  测试结果:通过以上修改参数后,两问题解决!

-------------------以下是我与开发方的谈话------------------

为什么调上面的参数:

Me: 上次那个为什么报与数据库连接失败,按道理是应该调web,或数据库参数,为什么你上次调系统参数就可以了
且只优化了TIME-WAIT套接字 而已

 ~~~ 10:51:54
我的理解是当压力测试的时候,WEB服务器会产生大量的TCP/IP连接,我用netstat -anp | wc -l查看了一下将近有3万的网络套接字,此时CPU也耗尽,导致这么多的TCP/IP连接CPU处理不过来,而使部分TCP/IP连接超时或处理失败

后来调整参数之后,再进行压力测试时只有一千左右的网络套接字,当跑到1000TPS时,有3千左右的网络套接字

总结:如果报超时,数据库连接失败等可考虑tcp连接数的问题,如果超过“万条”连接数,则要优化,tpc连接数.


阅读(728) | 评论(0) | 转发(0) |
0

上一篇:某项目2

下一篇:某项目4

给主人留下些什么吧!~~