您的位置:首页 > 其它

一周的性能测试与性能调优过程总结

2011-05-14 05:37 519 查看
2011-5-9至2011-5-14这周主要在进行性能测试及性能调优,今天下班前最后的测试结果基本满意,看到每天性能都有提升,虽然整个过程有点小郁闷,但是看到每天的付出都有明显的回报还是有点小兴奋,现总结如下。

基本测试场景:

负载服务器:nginx
Web服务器:两台tomcat
数据库:mysql
硬件:Dell poweredge R710 4核cpu 8g内存、千兆网卡及带宽
缓存服务器:memcached
压力测试工具:loadrunner x 3

测试基本要求:

800并发,平均响应时间<=1s

最终测试结果:

3000+并发,平均响应时间<1s

1天:

并发不到1000时有大量错误如超时、bad gateway…
过程分析:
分析jvm得知,当新生代和旧生代内存都达到100%时内存不释放,最终导致内存溢出,开始怀疑jdk6 u24版本到某个临界点存在bug,因为以前听HW公司的专家说过jrockit曾存在过类似的问题,bea曾花费很长时间解决,尝试各种办法解决中….

2天:

并发1000时有大量错误如超时、bad gatewa,但是程序运行平稳
过程分析:
更换jdk的不同版本问题依旧,所以觉得问题应该还是出现在程序上,事实上通过仔细分析jvm 的GC过程可知,GC还在频繁的进行中只是没有内存被回收回来,最后发现所有程序包中web.xml 默认的session timeout时间是20分钟,于是眼前一亮觉得问题应该就是在这里了,当访问总数达到一定程度时20分钟内把jvm耗尽,兴奋ing,其实这种可能我早上在地铁里就想到了

3天:

并发1000时有大量错误如超时、bad gateway,但是程序运行平稳,调优进行中
过程分析:
郁闷一天,服务器性能没有压力,但是就是性能上不去,有力无处使,但是此时我已经不怀疑jvm、mysql的性能瓶颈了,因为这两部分优化,心里比较有底,而且也系统分析过,甚至有点怀疑测试工具是否有问题以及测试人员是否正确使用loadruner,网络问题等,因为有一次发现一台服务器断过网,于是去机房调整交换机、网线等,发现断网的服务器网线的确可能存在问题(谁动过我的网线),调整后好一点点,但问题依旧,郁闷死个人啊O(∩_∩)O

4天:

并发2000,响应时间0.5s左右,程序运行平稳
过程分析:
接着第三天的郁闷,地铁和公交上都在思考瓶颈的来源,幸好不是自己开车O(∩_∩)O,发现调优过程中忽略了一个基本问题,忘记系统的分析 nginx及linux系统内核日志,彻底被自己打败了,经验不足啊,也木有人能帮到我,发现之前的bad gateway 在nginx找到来源了,这里有对应的错误 connect fail,问了一下google,发现很多人说linux内核bug,需要重新编译内核,有了上面的经验,让我深知有问题先从自身查起,不要轻易怀疑用户群比较大的优秀软件,接着查系统日志,发现有类似ip_conntrack: table full, dropping packet的错误,暗喜应该就是他了,原来丢包了啊,我说怎么有连接超时和 bad gateway,进行linux 内核tcp相关参数调整,重新测试调整,尽然成了,就这么成了,再次兴奋ing

5天:

并发3000,响应时间0.6s左右,程序运行平稳
过程分析:
系统的研究和分析linux tcp相关参数,根据应用场景调整重新测试,第一次运行良好,第二次2000并发迭代了100次再测试, Fuck! 四台服务器网卡全部down了,可惜了我的研究结果啊,还不如昨天的简单调整呢,去机房把所有网卡重启了一遍,在次调整了几个可能导致问题原因的参数,再测试,进行tcp 监控发现系统运行稳定了,测试结果基本满意,只是3000*100并发时平均响应时间1S多了一点点,再次调整nginx ,开启缓存、GZIP等,奇迹出现了,性能又有50%以上的提升,请求最长的平均时间0.6秒左右,可惜三台load runner(非正版)用负载进行测试的最大并发数就是3000,不能测试出服务器平均响应时间1S内的极限,待有空时继续验证。

小插曲:

期间,项目经理说在之前的项目经验中中发现在tomcat配置数据源比配置在应用里性能有很高提升,这个我一直持怀疑态度,都用一样的连接池(DBCP),没有理由啊,后经过大并发持续测试发现,性能基本相当,测试结果甚至略低于在应用中配置的结果,但是这个应该与测试环境、网络环境有关,误差可以忽略。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: